2026/11/4:补充
在M Hub v2.0.0 版本中,本功能已修复(提供了复制节点和插入节点对应up/down节点的功能)。原则上来说本文档不具备直接参考价值
一、背景
目标:用一个按键触发"打开终端"。
实现思路:Win 11 中Win+X呼出 Power User 菜单,菜单内再按I即启动终端。时序为:
Win↓ → X↓ → X↑ → Win↑ → I↓ → I↑
Win↑不可省略。I必须作为菜单加速键单独按下,若 Win 仍处于按下状态,会被系统解释为Win+I(打开设置)。
环境:迈从 A7 Pro,驱动(M Hub v1.0.0网页端/客户端)中该功能名为"快捷指令"。
二、问题
现象:
- 录制时按下 Win,系统立即弹出开始菜单并抢占焦点,录制器只捕获到
Win↓,丢失Win↑。 - 后续
I在系统层被组合为Win+I,触发设置而非终端。 - 手动添加节点可选
Win,录制产生的却是WinLeft,两者键值不同。手动添加的Win节点不会触发开始菜单。 - 录制界面无法为
WinLeft补录 Up 节点,节点序列无法闭合。
根因:Win 键在系统更底层被拦截并响应,驱动只记录到 Down。GUI 不提供对已录节点的"按下/抬起"类型编辑,无法修补。
三、试错
| 方案 | 结论 |
|---|---|
| 重复录制,抢在系统响应前释放 Win | 系统响应早于录制,无法实现 |
手动添加节点录入Win | 不触发开始菜单,但键值与录制节点不一致,仍无法在录制节点后追加 Up |
| 系统级禁用 Win 键(设想,未尝试) | 可行但代价高:全局生效、需重启,对无外设场景(如笔记本)改动大,不作首选 |
四、解决方案:导出 JSON,手动补齐 Up 节点
发现:快捷指令支持导出,导出文件为 JSON,节点序列以结构化数据存储。GUI 中不可编辑的节点属性,在文本层可直接修改。
数据结构:节点序列位于info.keyList,分两类:
| 节点类型 | 结构 |
|---|---|
| 按键节点 | {"val": "<键名>", "type": "key", "press": "down" | "up", "hover": false} |
| 延时节点 | {"val": <毫秒>, "type": "time", "press": null, "hover": false} |
按键事件之间以延时节点(本例 50 ms)间隔。录制所得序列缺少WinLeft的press: "up"节点。
步骤:
按
Win↓ → X↓ → X↑ → I↓ → I↑录制,得到缺失Win↑的指令。点击导出,获得 JSON 文件。
用文本编辑器打开,在
x的up节点及其后延时节点之后,i的down节点之前,插入一组"Up 节点 + 延时节点":{"val":"WinLeft","type":"key","press":"up","hover":false},{"val":50,"type":"time","press":null,"hover":false},关键点:
val必须为WinLeft(与录制的 Down 节点键值一致,而非Win),press为"up"。随后补一个延时节点,与其余事件间隔保持一致。
校验最终
keyList时序:WinLeft↓ → 50ms → x↓ → 50ms → x↑ → 50ms → WinLeft↑ → 50ms → i↓ → 50ms → i↑保存后通过驱动导入,将指令绑定到目标按键。
五、结果
按下绑定键后序列完整执行:Win+X呼出菜单 → Win 释放 →I作为菜单加速键命中"终端",终端创建成功。
六、结论
- 驱动录制器无法可靠处理被系统拦截的修饰键(Win)的 Up 事件,GUI 不支持编辑已录节点的
press属性。 - 通用解法:绕过 GUI,直接编辑导出的配置文件。凡支持导出/导入的配置,均可在文本层补足 GUI 缺失的能力。
- 相比禁用 Win 键,该方案仅作用于单条指令,无全局副作用,无需系统权限。
- 虽然可以用json配置节点,但是还是造成不少麻烦,希望M Hub的Dev团队早日修复。