我是靠谱客的博主 爱笑小丸子,最近开发中收集的这篇文章主要介绍HOOK 键盘钩子,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

键盘事件回调函数声明:

LRESULT CALLBACK KeyboardHookProc(int nCode,WPARAM wParam, LPARAM lParam)
{
	if (nCode == HC_ACTION)
	{
        switch (wParam)
		{
			case WM_KEYDOWN:  
			case WM_SYSKEYDOWN:
			//case WM_KEYUP:   
			//case WM_SYSKEYUP:
			{
				if (p->vkCode>=0x30&&p->vkCode<=0x39){
					// 数字0~9
				}
				else if(p->vkCode>=0x41&&p->vkCode<=0x5A){
					// 字母a~z
				}
				if (p->vkCode>=0x61&&p->vkCode<=0x7A){
					// 字母A~Z
				}
				//屏蔽
				else if ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)){
					// ALT+TAB
				}
				//屏蔽
				else if ((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)){
					// ALT+ESC
				}
				//屏蔽
				else if ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0)){
					// CTRL+ESC
				}
				else if ((p->vkCode == VK_ESCAPE) &&
					((GetKeyState(VK_CONTROL) & 0x8000) != 0) &&
					((GetKeyState(VK_SHIFT) & 0x8000) != 0)){
					// CTRL + SHIFT + ESC
				}
				else if (p->vkCode == VK_LWIN || p->vkCode == VK_RWIN){
					// 左右WIN键
				}
				//此处无法屏蔽CTRL+ALT+DEL,已在SAS window中屏蔽
				else if ((p->vkCode == VK_DELETE) &&
					((GetKeyState(VK_CONTROL) & 0x8000) != 0) &&
					((GetKeyState(VK_MENU) & 0x8000) != 0 )){
				// CTRL+ALT+DEL
				}
				break;
			}
		}
	}
	
	return ::CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);	// 消息传递,否则键盘就不起作用了
}

注册键盘钩子回调函数:

HHOOK hKeyboardHook = ::SetWindowsHookEx(WM_HOUSE_LL, KeyboardHookProc, NULL, 0);

卸载钩子:

::UnhookWindowsHookEx(hMousehook);

 

最后

以上就是爱笑小丸子为你收集整理的HOOK 键盘钩子的全部内容,希望文章能够帮你解决HOOK 键盘钩子所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部