首页 > 系统相关 >屏蔽Windows按键(除却ALT+CTRL+DELETE)

屏蔽Windows按键(除却ALT+CTRL+DELETE)

时间:2022-10-31 21:07:33浏览次数:33  
标签:pkbhs CTRL Windows 钩子 VK vkCode && qDebug ALT


钩子(hook),指用api来提前拦截并处理windows消息的手段。

全局钩子是系统钩子的一种,当指定的一些消息被系统中任何应用程序所处理时,这个钩子就被调用。

ALT+CTRL+DELETE是微软的操作系统直接处理的按键事件。除此之外,其它的按键都可以由我们来自行控制。


下面,来看一下键盘钩子是如何实现的。


//声明用到的钩子

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()
{
UnhookWindowsHookEx(keyHook);
}

//钩子用的函数
LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam )
{
//在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT类型地址
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
//如果nCode等于HC_ACTION则处理该消息,如果小于0,则钩子子程就必须将该消息传递给 CallNextHookEx
if(nCode == HC_ACTION){
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){
qDebug() << "Alt+Tab";
}else if(pkbhs->vkCode == VK_ESCAPE && pkbhs->flags &LLKHF_ALTDOWN){
qDebug() << "Alt+Esc";
}else if(pkbhs->vkCode == VK_LWIN || pkbhs->vkCode == VK_RWIN){
qDebug() << "LWIN/RWIN";
}else if(pkbhs->vkCode == VK_F4 && pkbhs->flags & LLKHF_ALTDOWN){
qDebug() << "Alt+F4";
}
if(pkbhs->vkCode == VK_F1 && pkbhs->flags &LLKHF_ALTDOWN) {
unHook();
qDebug() << "Alt+F1 back room";
}

return 1;//返回1表示截取消息不再传递,返回0表示不作处理,消息继续传递
}
return CallNextHookEx(keyHook, nCode, wParam, lParam);
}

标签:pkbhs,CTRL,Windows,钩子,VK,vkCode,&&,qDebug,ALT
From: https://blog.51cto.com/u_15854865/5811247

相关文章

  • Understanding Shared Folders and the Windows Firewall
    https://learn.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2008-r2-and-2008/cc731402(v=ws.11)......
  • 如何注册一个Windows服务
    目录​​1、介绍​​​​2、下载必要组件​​​​3、注册服务​​​​A、创建服务​​​​B、修改注册表​​​​C、设置该服务​​1、介绍instsrv.exe可以创建和删除服务,然......
  • Python开发 之 Python3打包(windows/linux)详解
    文章目录​​1、唠唠叨叨​​​​2、背景​​​​3、Python打包工具​​​​3.1、py2exe​​​​3.2、cx_Freeze​​​​3.3、PyInstaller​​​​4、Windows打包​​​​4.......
  • windows10卸载vmware workstation
    在应用与功能里面,vmware的卸载选项是禁用的,而点击修改,却也弹出了报错,似乎无法直接卸载。网上大多说需要下载一个WindowsInstallerCleanUP之类的软件,但又对那种未知来源的......
  • windows:查看端口占用情况相关命令
    一、通过命令行查找端口被谁占用1、window+R组合键,调出命令窗口2、查看被占用端口对应的PID,输入命令:netstat-ano|findstr端口,回车,记录最后一位数字,即pid3、继续输......
  • windows IIS中 vue的反向代理部署
    1、下载urlwrite,https://webpihandler.azurewebsites.net/web/handlers/webpi.ashx/getinstaller/urlrewrite2.appids2、下载ARRCache,https://webpihandler.azurewebsites......
  • Windows - Windows 开机运行脚本文件
    Windows开机运行脚本文件 按快捷键win+r,输入gpedit.msc进入本地策略管理器点击windows设置->脚本->(启动/关机),然后双击启动点击添加点击浏览选择你想要......
  • 问题:Windows找不到文件。请确定文件名是否正确后,再试一次。
    问题:Windows找不到文件。请确定文件名是否正确后,再试一次报错排查不可见字符复制到vscode中,发现是否有不可见字符。如:路径带空格英文双引号""使用缩写/短名称......
  • React Native(windows)--项目环境相关问题
    (一)、命令行一:查看连接的虚拟机或真机:执行命令:adbdevices二:在虚拟机或真机上打包项目执行命令:yarnreact-nativerun-android三:真机或虚拟机调出调试执行命令:adbshe......
  • Windows修改mysql5.7数据库存储位置
    文章目录​​一、默认位置​​​​二、修改位置​​​​第一步:找到查找的位置​​​​第二步:复制Data到你想要的位置顺便复制下路径​​​​第三步:修改my.ini​​​​三、重......