背景
在 Windows 上,默认热键绑定为 rightControl。当焦点位于外部窗口(如 Notepad)时,全局热键路径正常;但当 OpenLess 主窗口自身处于前台时,按默认右 Ctrl 没有反应。
复现
- 启动 OpenLess(Windows)
- 保持默认热键
rightControl
- 点击 OpenLess 主窗口让其处于前台
- 按实体 Right Ctrl
实际结果
- 主窗口前台时没有进入原本的全局热键触发路径
- 日志显示 UI/DOM 能收到
ControlRight,但 WH_KEYBOARD_LL 路径没有对应 Windows key event 日志
对照证据
- OpenLess 前台时有:
[ui-key] type=keydown key=Control code=ControlRight ...
- 同时没有:
[hotkey] Windows key event ...
- Notepad 前台时同一个实体 Right Ctrl 仍会出现:
[hotkey] Windows trigger pressed vk=163
[coord] hotkey pressed ...
修复思路
为 Windows 主窗口增加前台键盘兜底:
- 主窗口
keydown/keyup 上报当前 event.key / event.code
- 后端按当前
hotkey.trigger 进行匹配
- 命中后复用既有 coordinator 的 pressed/released/cancel 语义
- 保持全局 hook 路径不变,仅补足 OpenLess 自己前台时的缺口
验证
- OpenLess 前台下,默认
rightControl 已恢复:
[window-hotkey] pressed trigger=RightControl code=ControlRight repeat=false
[coord] hotkey pressed mode=Toggle phase=Idle
- Notepad 前台下,全局 hook 行为仍保持正常
背景
在 Windows 上,默认热键绑定为
rightControl。当焦点位于外部窗口(如 Notepad)时,全局热键路径正常;但当 OpenLess 主窗口自身处于前台时,按默认右 Ctrl 没有反应。复现
rightControl实际结果
ControlRight,但WH_KEYBOARD_LL路径没有对应Windows key event日志对照证据
[ui-key] type=keydown key=Control code=ControlRight ...[hotkey] Windows key event ...[hotkey] Windows trigger pressed vk=163[coord] hotkey pressed ...修复思路
为 Windows 主窗口增加前台键盘兜底:
keydown/keyup上报当前event.key/event.codehotkey.trigger进行匹配验证
rightControl已恢复:[window-hotkey] pressed trigger=RightControl code=ControlRight repeat=false[coord] hotkey pressed mode=Toggle phase=Idle