ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何找出占用全局热键的程序:Hotkey Detective 使用指南

如何找出占用全局热键的程序:Hotkey Detective 使用指南 如何找出占用全局热键的程序Hotkey Detective 使用指南【免费下载链接】hotkey-detectiveA small program for investigating stolen key combinations under Windows 7 and later.项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective按下刚设置的组合键屏幕毫无反应或者弹出一个你根本不想打开的程序。这就是全局热键冲突。Windows 不会告诉你哪个进程注册了这个组合得自己去找。开源工具 Hotkey Detective 就是干这个的它把你刚才按的那个键被谁接走了告诉你适合截图工具抢了 PrintScreen、后台软件吞掉快捷键这类排查场景。旧办法为什么失效早年间的检测工具走的都是同一条路线把所有可能的组合挨个试按一遍看哪个程序有反应。这套思路在 Windows 7 上尚可Windows 8 之后系统的按键分发机制变了探测时发出的按键会被派发给系统里所有进程触发一堆意外行为这条路基本走不通。手动排查也不现实——系统里没有任何现成的入口或命令能直接列出某个热键注册给了哪个进程。按下那个键之后发生了什么程序启动后先创建一块叫内存映射文件的共享区域说白了就是让两个进程读写同一块物理内存相当于几个人共用一块黑板。主程序把自己的窗口句柄写进这块区域再把一个钩子 DLL 依次塞进系统里的每个进程。这就是 DLL 注入一个小文件被加载进别的进程的内存空间里运行。每个进程内DLL 会在系统的消息分发流上装上两处钩子。钩子就是拦截点每条消息递给程序之前都要先过它。它只关心一种消息——WM_HOTKEY也就是系统在全局热键触发时发出的信号。你按下那个键的瞬间如果某个进程确实注册了这个组合系统会把 WM_HOTKEY 消息投递给它。钩子截获后把窗口句柄和按键信息写回共享区域。主程序收到回报凭窗口句柄反查出这个进程的可执行文件路径把组合 → 进程的记录写进表格。如果一直没人接这个组合会被标记为未分配说明它没有任何全局注册。跑起来看看从 https://gitcode.com/gh_mirrors/ho/hotkey-detective 克隆源码用 CMake 构建得到主程序和钩子 DLL 两个产物。首次运行右键选以管理员身份运行否则注入不进别的进程。窗口打开后按一下出问题的组合表格里会多出一行左边是按键组合右边是接走它的那个进程的完整路径。如果那一行显示的是 [Unassigned]说明系统里没有程序注册过这个组合。想看实现细节拦截逻辑在 dll/HkdHook.cpp回报处理在 src/MainWindow.cpp。它到哪儿就不灵了仅支持 Windows 8 及之后的系统必须以管理员权限运行否则无法注入其他进程只检测注册到系统层面的全局热键应用内部快捷键如浏览器里的 CtrlT不在范围内关闭后注入的 DLL 仍留在各进程中安装目录删不掉重启系统才能释放适合谁留着普通用户把它当排障工具用装完新软件发现旧快捷键失灵跑一次、按一下那个键拿到肇事程序的路径。开发者看它的实现注入、钩子、共享内存回报这套流程完整、代码量小可以当自己写热键调试工具时的样例。它不改动任何按键分配也不负责解决冲突只是回答一个问题这个键最后落到了谁手里。【免费下载链接】hotkey-detectiveA small program for investigating stolen key combinations under Windows 7 and later.项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表