好友
阅读权限10
听众
最后登录1970-1-1
|
//这是EXE
#include <iostream>
#include <windows.h>
typedef BOOL (*stratHOOK)();
typedef BOOL (*freeHOOK)();
int main()
{
HMODULE hload= LoadLibrary("Dll14.dll");
if (hload == NULL)
printf("LoadLibrary_erro=%d\n",GetLastError());
HMODULE hmoudle = GetModuleHandle("Dll14.dll");
stratHOOK mystratHOOK = (stratHOOK)GetProcAddress(hmoudle,"stratHOOK");
freeHOOK myfreeHOOK = (freeHOOK)GetProcAddress(hmoudle, "freeHOOK");
mystratHOOK();
// myfreeHOOK();
system("pause");
return 0;
}
//这是DLL
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <iostream>
#include "mydll.h"
HMODULE g_hModule;
HHOOK __sethook;
//钩子回调函数
LRESULT Hookproc(
int code,
WPARAM wParam,
LPARAM lParam
);
//安装钩子
BOOL stratHOOK();
//卸载钩子
BOOL freeHOOK();
/////////////////////////////////////////////////////////
//钩子处理函数
LRESULT Hookproc(
int code,
WPARAM wParam,
LPARAM lParam
)
{
if (code == HC_ACTION)
printf("%c\n", wParam);
else
CallNextHookEx
(NULL,
code,
wParam,
lParam);
return 0;
}
//安装钩子
BOOL stratHOOK()
{
__sethook = SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)Hookproc,
g_hModule, 0);//设置全局消息钩子
if (__sethook)
{
printf("HOOK成功\n");
return 1;
}
else
return 0;
}
//卸载钩子
BOOL freeHOOK()
{
UnhookWindowsHookEx(__sethook);
return 0;
}
/////////////////////////////////////////////////////
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hModule = hModule;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
问题是程序运行时候不进入 钩子回调函数 LRESULT Hookproc来处理消息,希望大神们指点一二 |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|