失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > VC++键盘钩子demo

VC++键盘钩子demo

时间:2019-05-19 05:47:11

相关推荐

VC++键盘钩子demo

HHOOK keyHook = NULL;//先声明函数,实现在下面LRESULT CALLBACK keyProc(int nCode, WPARAM wParam, LPARAM lParam);//初始化钩子,关闭键盘事件(除了ALT+CTRL+DELETE)void initHook(){keyHook = SetWindowsHookEx(WH_KEYBOARD_LL, keyProc, GetModuleHandle(NULL), 0);}//销毁钩子void unHook(){if (keyHook){UnhookWindowsHookEx(keyHook);}}//钩子用的函数LRESULT CALLBACK keyProc(int nCode, WPARAM wParam, LPARAM lParam){//在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT类型地址KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *)lParam;//如果nCode等于HC_ACTION则处理该消息,如果小于0,则钩子子程就必须将该消息传递给 CallNextHookExif (nCode == HC_ACTION) {if (pkbhs->vkCode == VK_ESCAPE){CLogHelp::ITCLog("keyProc---->Esc");if (g_pthisDlg){CLogHelp::ITCLog("Closescreen_FULL");g_pthisDlg->Closescreen_FULL();}}else if (pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) & 0x8000 && GetAsyncKeyState(VK_SHIFT) & 0x8000) {//qDebug() << "Ctrl+Shift+Esc";}else if (pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) & 0x8000) {//qDebug() << "Ctrl+Esc";}else if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN) {CLogHelp::ITCLog("Alt+Tab ");}else if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags &LLKHF_ALTDOWN){CLogHelp::ITCLog("Alt+Esc");}else if (pkbhs->vkCode == VK_LWIN || pkbhs->vkCode == VK_RWIN) {CLogHelp::ITCLog("VK_LWIN vs VK_RWIN ");}else if (pkbhs->vkCode == VK_F4 && pkbhs->flags & LLKHF_ALTDOWN) {CLogHelp::ITCLog("Alt+F4 ");}else if (pkbhs->vkCode == VK_F1 && pkbhs->flags &LLKHF_ALTDOWN) {CLogHelp::ITCLog("Alt+F1 back room ");unHook();}else if (pkbhs->vkCode == VK_F1){CLogHelp::ITCLog("F1 Key press ");}return 1;//返回1表示截取消息不再传递,返回0表示不作处理,消息继续传递}return CallNextHookEx(keyHook, nCode, wParam, lParam);}

如果觉得《VC++键盘钩子demo》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。