# hotkeyCheck **Repository Path**: Innovational/hotkeyCheck ## Basic Information - **Project Name**: hotkeyCheck - **Description**: Windows 热键占用检测工具 — 检测快捷键被哪个进程占用。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-29 - **Last Updated**: 2026-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # hotkeyCheck Windows 热键占用检测工具 — 检测快捷键被哪个进程占用。 ## 用法 ```powershell hotkeyCheck.exe [--deep] <热键> ``` | 模式 | 说明 | |------|------| | 快速扫描 | 枚举顶层窗口,通过 `WM_GETHOTKEY` 查询 | | `--deep` 深度扫描 | 额外扫描子窗口、消息窗口、后台进程线程 | ## 示例 ```powershell # 快速检测 .\hotkeyCheck.exe ctrl+shift+x .\hotkeyCheck.exe win+d # 深度搜索 .\hotkeyCheck.exe --deep shift+x .\hotkeyCheck.exe --deep alt+space # 热键空闲 > .\hotkeyCheck.exe ctrl+shift+alt+x 正在检测热键: Ctrl + Alt + Shift + X ... ✓ 热键 Ctrl + Alt + Shift + X 当前未被任何进程占用,可以正常使用。 # 精确定位 > .\hotkeyCheck.exe ctrl+shift+a 正在检测热键: Ctrl + Shift + A ... ✗ 热键 Ctrl + Shift + A 已被以下进程占用: 进程名称: Snipaste.exe 进程 PID: 12345 窗口标题: Snipaste 可执行路径: C:\Program Files\Snipaste\Snipaste.exe # 被占用但无法定位 > .\hotkeyCheck.exe shift+x 正在检测热键: Shift + X ... ✗ 热键 Shift + X 已被占用,但无法确定具体是哪个进程注册的。 (该热键可能由无窗口的后台进程通过 RegisterHotKey(NULL, ...) 注册) ``` ## 工作原理 ``` RegisterHotKey 尝试注册目标热键 ├─ 成功 → 热键空闲(立即反注册,不残留) └─ 失败 → 热键被占用 → 开始搜索 搜索(--deep 为四阶段): 1. EnumWindows → 顶层窗口 + WM_GETHOTKEY 2. EnumChildWindows → 子窗口 3. FindWindowEx(HWND_MESSAGE) → 消息窗口 4. 进程线程枚举 → EnumThreadWindows ``` ## 限制 | 可检测 | 无法检测 | |--------|---------| | 应用通过 HWND 调用 `RegisterHotKey` 注册的热键 | `RegisterHotKey(NULL, …)` 无窗口注册 | | | 系统级热键(`Ctrl+Shift+Esc` 等) | 无法定位时会明确报告"已被占用",不会静默失败。 ## 为什么不做持久监控 最早设计了 AppInit_DLLs 持久 Hook 方案——系统启动后注入 DLL,拦截所有进程的 RegisterHotKey 调用并写入日志。经实测,该方案在 Windows 11 24H2 已不可行。 | 方案 | Win11 24H2 状态 | |------|----------------| | AppInit_DLLs | 已被平台静默禁用(非注册表配置错误) | | SetWindowsHookEx 全局钩子 | 只在进程调用 GetMessage 后注入,时序晚于 RegisterHotKey | | ETW 内核事件追踪 | RegisterHotKey 无公开 Provider | | 驱动级 Hook | 需要 EV 签名证书,且与默认启用的内核完整性策略冲突 | 微软从 Win10 到 Win11 持续收紧进程注入管控——HVCI、Smart App Control、 代码完整性策略默认开启,全平台趋势是让第三方代码无法在内核或用户态 拦截系统 API 调用。 这不是代码缺陷,是平台层面的锁定。工具在以上能力边界内做到了它能做的: 对窗口注册的热键精确定位,对无法定位的明确报告而非静默失败。 ## 编译 ```powershell go build -o hotkeyCheck.exe . ``` ## 项目结构 ``` hotkeyCheck/ ├── main.go # CLI 入口 ├── hotkey.go # 核心检测引擎 ├── winapi.go # Win32 API 封装 ├── keymap.go # 键名 ↔ 虚拟键码映射 └── go.mod ``` ## License MIT