69,369
社区成员
发帖
与我相关
我的任务
分享
//2014.9.7使用钩子后,点击按键后程序会直接死掉。。
#pragma comment(lib,"keyBoard.lib")
//要从DLL中输入的变量和函数
extern "C" __declspec(dllimport) HHOOK hHook;//
extern "C" __declspec(dllimport)
LRESULT CALLBACK KeyboardProc
(int nCode, WPARAM wParam, LPARAM lParam);
int main()
{
//SetConsoleCtrlHandler((PHANDLER_ROUTINE)MyHandler, TRUE);//增加打开数据库,忘记关闭数据库的操作。
hHook=SetWindowsHookEx(WH_KEYBOARD,
KeyboardProc,
GetModuleHandle("keyBoard.dll"),
0);
while(1)
{这里是若干代码}
}
extern "C" __declspec(dllexport) HHOOK hHook=NULL;
// DLL 自用的全局变量
FILE * fl ;
char buffer=0;
//定义全局的键盘勾子函数:
//DLL输出的勾子函数
extern "C" __declspec(dllexport)
LRESULT CALLBACK KeyboardProc(
int nCode,
WPARAM wParam, //虚键代码
LPARAM lParam // 击键消息的信息
)
{
if(lParam & 0x80000000)
{//如果某键按下
MessageBox(NULL,TEXT("拦截按键信息成功"),TEXT(""),MB_OK);
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
HHOOK g_hook = NULL;
HMODULE g_hDllModule = NULL;
BOOLEAN
WINAPI
DllMain(
IN HINSTANCE hDllHandle,
IN DWORD nReason,
IN LPVOID Reserved
)
{
g_hDllModule = hDllHandle;
return TRUE;
}
__declspec(dllexport) BOOL Hook()
{
g_hook=SetWindowsHookEx(WH_KEYBOARD,
KeyboardProc,
g_hDllModule,
0);
return g_hook?TRUE:FALSE;
}
__declspec(dllexport) BOOL Unhook()
{
return UnhookWindowsHookEx(g_hook);
}
exe调用:
typedef BOOL (*LPHOOK)();
typedef BOOL (*LPUNHOOK)();
LPHOOK g_hookFun = NULL;
LPUNHOOK g_unhookFun = NULL;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
HMODULE h = LoadLibrary("keyBoard.dll");//路径要设置正确啊
if(h)
{
g_hookFun = (LPHOOK)GetProcAddress(h,"Hook");
g_unhookFun = (LPUNHOOK)GetProcAddress(h,"Unhook");
}
...
return TRUE;
}