屏蔽键盘信息(低级键盘钩子)

我以介绍如何屏蔽PrtSc(PrintScreen)截屏键为例,标题中说的低级键盘钩子(WH_KEYBOARD_LL)是因为普通键盘钩子(WH_KEYBOARD)是无法过滤像截屏键这样的系统按键,屏蔽系统按键回了其余的自然不在话下。

在低级键盘钩子函数里判断这个消息是否属于PrintScreen按键,如果是,就直接返回TRUE之前在介绍Windows钩子函数的时候说过,想屏蔽消息的话就直接返回一个TRUE,如果不是就调用CallNextHookEx()函数传递给钩子链的下一个。

大体的方法在另一篇博客中,看了这个就知道接下来怎么做了

LRESULT _stdcall  LowLevelKeyBoardProc(int code, WPARAM wParam, LPARAM lParam)
{
	KBDLLHOOKSTRUCT *Key_Info = (KBDLLHOOKSTRUCT*)lParam;
	if (HC_ACTION == code)
	{
		if (WM_KEYDOWN == wParam || WM_SYSKEYDOWN == wParam)// ||WM_SYSKEYDOWN == wParam
		{
			if (Key_Info->vkCode == VK_SNAPSHOT) //如果是屏蔽键
			{
			   //MessageBox(NULL,TEXT("PrtSc键被禁用"),NULL,MB_OK);

				//不能再上边随便的加函数  如果加了函数  系统在这个函数执行的间隙就把需要屏蔽的键盘消息给截获了
				return TRUE;
			}
		}
	}
	return CallNextHookEx(g_Hook,code,wParam,lParam);
}

VOID UnUsePrtSc()
{
	//安装的是低级键盘钩子    WH_KEYBOARD_LL
	g_Hook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyBoardProc, g_Instance, NULL);
}

如果要屏蔽其他键盘消息的话,在上边if(Key_Info->vkCode==VK_SNAPSHOT)

把VK_SNAPSHOT更换为VK_A、VK_B(键盘A消息、键盘B消息),更多的在MSDN搜索VK_开头的由更多的。

但是注意 再vs2015或者其他版本对VK_没有定义宏但是查看定义时候有写道:

所以VK_A等宏无效的时候,就直接令Key_Info->vkCode等于相应的十六进制就行了

发布了37 篇原创文章 · 获赞 12 · 访问量 9252

猜你喜欢

转载自blog.csdn.net/weixin_43265881/article/details/103779125