首页 > 编程知识 正文

屏蔽自带键盘,键盘被屏蔽

时间:2023-05-06 14:51:28 阅读:257578 作者:41

我以介绍如何屏蔽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_LLg_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等于相应的十六进制就行了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。