/********************************************************** 不用调用dll就可以执行的全局钩子示例: 只留下F12做为程序退出,屏蔽键盘和鼠标,测试时请注意 ********************************************************/ #ifndef HH_H #define HH_H #include <QApplication> #include <Windows.h> HHOOK keyHook=NULL; HHOOK mouseHook=NULL; //声明卸载函数,以便调用 void unHook(); //键盘钩子过程 LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam ) { //在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT类型地址 KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam; if(pkbhs->vkCode==VK_F12) { void unHook(); qApp->quit(); } return 1;//返回1表示截取消息不再传递,返回0表示不作处理,消息继续传递 } //鼠标钩子过程 LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam ) { return 1; } //卸载钩子 void unHook() { UnhookWindowsHookEx(keyHook); UnhookWindowsHookEx(mouseHook); } //安装钩子,调用该函数即安装钩子 void setHook() { //这两个底层钩子,不要DLL就可以全局 // 底层键盘钩子 keyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,GetModuleHandle(NULL),0); // 底层鼠标钩子 mouseHook =SetWindowsHookEx( WH_MOUSE_LL,mouseProc,GetModuleHandle(NULL),0); }