Argus
文档目录 · v0.3.4 文档首页

使用指南

界面与操作硬件数据的来源与限制常驻、托盘与快捷键设置

开发指南

环境与命令构建与缓存多语言性能基线与测量提交与发布依赖与安全维护Windows 代码签名

架构

架构管理员启动采集层 argus-core前端Tauri 宿主特权服务系统任务管理器替换技术栈

设计

设计原则曲线动画全局快捷键窗口外观

项目

已知问题路线图
搜索文档

全局快捷键

显示或隐藏 Argus 的全局快捷键由 src-tauri/src/hotkey.rs 在主窗口上调用 Windows 的 RegisterHotKey 注册,录制在设置页完成(ui/src/lib/hotkey.ts 的 record)。可用的键和不允许的组合写在 ui/src/lib/hotkey-table.json,原生侧与设置页共用,两边的测试读取同一份用例(ui/tests/hotkey-cases.json)。用法见设置。

RegisterHotKey 的行为

以下结论在 Windows 11(26300)上实测得到:用 SendInput 注入带标记的按键,以 F20–F23 作主键,同一线程上的低级键盘钩子记录系统看到的事件。

情形 结果
先按住 CapsLock,或 CapsLock 处于开启状态,再按组合 照常触发
先按主键、后按修饰键 不触发:修饰键集合在主键按下的那一刻比较
以 VK_RCONTROL 为主键 从不触发;以 VK_CONTROL 为主键时,单按任一侧 Ctrl 就触发
左 Ctrl、右 Ctrl、左 Alt 依次按下(仅修饰键) 只有 Ctrl+Alt+VK_MENU 触发,且在 Alt 按下的瞬间,会抢在所有 Ctrl+Alt+字母之前
注册 Ctrl+CapsLock 必须先按 Ctrl;被热键吃掉的 CapsLock 仍会切换大写锁定
主键已经按住时才注册,随后出现一次自动重复 触发,带 MOD_NOREPEAT 也一样(不带时每次重复都触发)
低级键盘钩子吞掉主键 已注册的热键不触发:钩子先于热键处理

另外,Shift+A、Ctrl+C、Ctrl+1、Alt+Space、Alt+PrintScreen 都能注册成功;Alt+F4、Alt+Tab、Ctrl+Esc、Ctrl+Shift+Esc、无修饰键的 F12 和大多数 Win+字母返回 ERROR_HOTKEY_ALREADY_REGISTERED。

由此做出的决定

  • 只用 RegisterHotKey:它不区分左右、不支持仅修饰键或 CapsLock 作修饰键,也不支持两个普通键的组合(只匹配修饰键加一个键),但没有常驻开销,也不让每一次按键经过 Argus。低级键盘钩子能做到这些,代价是全系统的每次按键都要等 Argus 的回调,回调超过 LowLevelHooksTimeout 时会被系统静默移除,前台为管理员窗口时收不到按键,也容易被安全软件当作键盘记录。
  • 规则由 Argus 拦截:系统接受的组合里有会破坏正常使用的(只含 Shift 的组合让所有程序无法输入大写字母,Ctrl+C 让复制失效),所以新组合须含 Ctrl、Alt 或 Win(F13–F24 例外,Shift+F1–F9、Shift+F11 需确认),并拒绝表中的保留与编辑组合和锁定键。带 Ctrl 的 Pause 组合也拒绝:按住 Ctrl 时 Pause 键发出 Break,Windows 报为 VK_CANCEL,注册在 VK_PAUSE 上的热键不会触发。已保存的旧值启动时照常注册,规则收紧不会让已有的快捷键失效。
  • 主键松开时才保存:按下时保存,快捷键就在主键还按着时注册,按住稍久就会被自动重复触发,窗口当场隐藏。
  • 录制期间暂停当前快捷键:注册着的组合到不了页面,再按一次当前快捷键只会隐藏窗口。窗口隐藏或 60 秒后,原生侧自动恢复。
  • 按虚拟键码录制:录制器按页面的 keyCode(Chromium 在 Windows 上给出的虚拟键码)查表,注册用的也是虚拟键码;只有输入法处理中的按键(229)和没有键码的事件按物理位置(code)查表。表中没有的键码(例如 VK_OEM_8)不能使用,不按物理位置换成美式键盘上的另一个键。
  • 页面收不到的按键:被其他程序注册的组合,主键按下不会到达页面;只按着修饰键 1.5 秒仍没有主键时,设置页提示该组合可能已被占用。PrintScreen 在 Windows 上只有 keyup,修饰键按住时按 keyup 补录。
  • 更改是事务:先注册新组合,保存成功后再注销旧组合;保存失败时撤销新组合。
在 GitHub 查看此页