禁用 Windows 系统热键
Windows 中存在大量与 Win 组合使用的全局热键。比如 Win + E 打开资源管理器、Win + R 打开运行对话框、Win + D 最小化所有桌面窗口、Win + Tab 显示任务视图,等等。几乎所有 Win 与单一按键的组合都被系统占用了,而通常用户日常使用的系统热键只占其中很少一部分。如果能禁用(释放)一些 Windows 系统热键,以供其他软件使用,想来也是甚好。
编程实现
由于大多数系统热键是由 explorer.exe 进程通过 RegisterHotkey()
注册的。想要抢占这些热键,只要在 Explorer 启动前抢先注册就可以了。通过替换系统默认 Shell 可以实现用户程序先于 Explorer 启动。
修改注册表如下键值:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
将原 Shell 值 explorer.exe
改为你自己编写的程序路径。在程序中注册需要的热键,然后再启动 Explorer 进程便可。
此外,还可以使用 SetWindowsHookEx()
设置底层键盘钩子拦截全局热键。例如 AutoHotkey 就是使用这个方法来屏蔽和覆盖系统热键的。该方法可以拦截大多数系统热键,除了少部分特例。比如:
- Win + L (锁定会话)
该热键由系统进程 Winlogon 处理,用户进程无法拦截。 - Win + P (切换投影模式)
该热键由系统服务处理,用户进程无法拦截。
修改注册表
方法一
该方法可以禁用 Explorer 注册的所有 Win 组合热键。缺点是一些常用的热键也失效了。
在注册表中创建或修改如下 DWORD 值为 1
:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoWinKeys
重启 Explorer 进程使设置生效。
方法二
该方法可以选择性禁用 Explorer 注册的 Win 组合热键。
在注册表中创建如下可扩充字符串(Expandable String)值:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DisabledHotkeys
假设我们要禁用 Win + E、Win + Q 和 Win + D,双击编辑字符串,输入 EQD 并保存。重启 Explorer 进程使设置生效。
方法三
该方法可以禁用 Win + L 热键。
在注册表中创建或修改如下 DWORD 值为 1
:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableLockWorkstation