按键序列语法#
从一个快捷键开始#
在“发送按键”中粘贴 ^c,Windows 会发送 Ctrl+C;Mac 复制使用 #c,即 Command+C。也可以点击“录制”,按下组合键后点“完成”。Lua 的 ms.keys(sequence) 使用同一套语法。
普通字符表示美式键盘位置。abc 依次按 A、B、C,写成大写 ABC 也不会自动按 Shift。需要 Shift+A 时用 +a。Unicode 或固定文字见文本与转义及剪贴板示例。
修饰符与分组#
| 前缀 | Windows | Mac |
|---|---|---|
^ | Ctrl | Control ⌃ |
% | Alt | Option ⌥ |
+ | Shift | Shift ⇧ |
# | Win | Command ⌘ |
前缀作用于下一个键或括号分组。^+t 发送 Ctrl+Shift+T;^(ac) 对 A 和 C 都加 Ctrl;^ac 只有 A 带 Ctrl。分组可以嵌套,请配对括号。分组修饰符会附加到每个按键动作,不要依赖它在两个键之间始终保持按下。末尾单独一个修饰符不会发送按键;需要修饰键本身时,例如使用 {CTRL}。
Lua ms.is_keys_pressed 在两平台查询所有键和修饰键的并集:^ac 要求 Control、A、C 同时按下。前缀接受任意一侧,显式 {LCTRL}/{RCTRL} 名称保留侧别。重复次数忽略;延时、文本、鼠标或滚轮步骤使结果为 false。此接口不识别过去按下的顺序。
键名、重复与延时#
{ENTER} 表示回车,键名不区分大小写。{LEFT 3} 连按三次左方向键。正整数表示重复次数,0 或负数回退为一次。{SLEEP 100} 等待 100 毫秒,必须提供非负整数。键名与参数之间用空格分隔。
例如 Windows 的 ^c{SLEEP 100}^v 会复制、稍等、粘贴;Mac 对应 #c{SLEEP 100}#v。
下表列出解析器接受的名称,包括别名和全部编号功能键/小键盘键。单个 ASCII 字母、数字或支持的美式标点也可以放入花括号,如 {a}、{+}。
| 键名 | 含义 |
|---|---|
{ENTER}, {RETURN} | 回车 |
{ESC} | 退出 |
{TAB} | 制表键 |
{BACKSPACE} | 退格 |
{SPACE} | 空格 |
{CAPSLOCK} | 大写锁定 |
{INSERT}, {INS} | 插入(仅 Windows) |
{DELETE}, {DEL} | 删除/向前删除 |
{HOME}, {END} | 开头/末尾 |
{PGUP}, {PGDN} | 上一页/下一页 |
{UP}, {DOWN}, {LEFT}, {RIGHT} | 方向键 |
{PRTSC} | 截屏(仅 Windows) |
{BREAK} | 中断(仅 Windows) |
{MEDIA_NEXT}, {MEDIA_PREV}, {MEDIA_STOP}, {MEDIA_PLAY}, {MEDIA_PLAY_PAUSE} | 媒体键(按键序列中仅 Windows) |
{VOLUME_MUTE}, {VOLUME_DOWN}, {VOLUME_UP} | 音量键(按键序列中仅 Windows) |
{CTRL}, {ALT}, {SHIFT} | Control/Alt(Mac 为 Option)/Shift |
{LCTRL}, {RCTRL}, {LSHIFT}, {RSHIFT}, {LALT}, {RALT} | 左右修饰键,Mac 的 Alt 为 Option |
{LWIN}, {WIN}, {RWIN} | Windows 键,Mac 为 Command |
{F1}, {F2}, {F3}, {F4}, {F5}, {F6}, {F7}, {F8}, {F9}, {F10}, {F11}, {F12}, {F13}, {F14}, {F15}, {F16}, {F17}, {F18}, {F19}, {F20}, {F21}, {F22}, {F23}, {F24} | 功能键,Mac 支持 F1–F20 |
{N0}, {N1}, {N2}, {N3}, {N4}, {N5}, {N6}, {N7}, {N8}, {N9} | 小键盘数字 0–9 |
{MOUSE_LEFT}, {MOUSE_RIGHT}, {MOUSE_MIDDLE}, {MOUSE_X1}, {MOUSE_X2} | 鼠标点击(仅 Windows) |
{MOUSE_WHEEL}, {MOUSE_HWHEEL} | 滚轮,例如 {MOUSE_WHEEL 120}、{MOUSE_HWHEEL -120}(仅 Windows) |
{SLEEP} | 等待,例如 {SLEEP 100},单位毫秒 |
鼠标按钮与滚轮#
Windows 支持 {MOUSE_LEFT}、{MOUSE_RIGHT}、{MOUSE_MIDDLE}、{MOUSE_X1} 和 {MOUSE_X2} 点击。{MOUSE_LEFT 2} 点击两次,不会移动鼠标位置。
{MOUSE_WHEEL 120} 向上滚一格,-120 向下;{MOUSE_HWHEEL 120} 向右,-120 向左。参数是带符号的滚轮位移,不是重复次数。这是模拟输入的正负约定,与录制手势滚轮步骤的方向符号不同。
Mac 能解析这些记号,但执行按键时会跳过鼠标与滚轮动作,不能通过 ms.keys 模拟 Mac 点击或滚动。
文本与转义#
文本优先模式只通过 Lua 的 ms.keys(s, true) 使用,“发送按键”编辑器始终使用按键模式。普通字符会作为 Unicode 文字输出,但 ^、%、+、#、括号和左花括号仍会被解释为语法。花括号中的单字符在文本优先模式下仍是按键动作。
在文本优先模式里发送快捷键,要给键加花括号:^{c} 发送 Ctrl+C,#{c} 发送 Command+C。这个模式中的 ^c 会输出文字 c,丢弃修饰符。也可以另用普通按键模式调用 ms.keys("^c")。
| 想输入的字符 | 序列写法 |
|---|---|
^ | {^} |
% | {%} |
+ | {+} |
# | {#} |
( | {(} |
) | {)} |
{ | {{} |
} | }(不加括号) |
反斜杠不是按键序列转义符。Lua 普通引号字符串中,一个反斜杠要写成 "\\",也可用长括号字符串。含语法符号的任意文本建议用剪贴板方法,避免两层转义。
常用快捷键#
是否生效取决于目标程序和系统的快捷键设置。
| 用途 | Windows 序列 | Mac 序列 |
|---|---|---|
| 复制 | ^c | #c |
| 粘贴 | ^v | #v |
| 剪切 | ^x | #x |
| 全选 | ^a | #a |
| 撤销 | ^z | #z |
| 新建标签页 | ^t | #t |
| 关闭标签页 | ^w | #w |
| 恢复关闭的标签页 | ^+t | #+t |
| 下一个标签页 | ^{TAB} | ^{TAB} |
| 上一个标签页 | ^+{TAB} | ^+{TAB} |
| 切换程序 | %{TAB} | #{TAB} |
| 上一个/下一个桌面 | #^{LEFT} / #^{RIGHT} | ^{LEFT} / ^{RIGHT} |
| 区域截图 | #+s | #+4 |
| 显示桌面 | #d | {F11} |
| 任务管理器/活动监视器 | ^+{ESC} | 使用“打开程序”:com.apple.ActivityMonitor |
| 锁屏 | #l | ^#q |
为什么不能发送 Ctrl+Alt+Del#
Ctrl+Alt+Del 是 Windows 的安全注意序列(Secure Attention Sequence)。Windows 会忽略用于该序列的普通模拟输入,所以 ^%{DEL} 无法打开安全界面。可用 ^+{ESC} 打开任务管理器,#l 锁屏;需要注销时,用“运行命令”执行 shutdown /l,它会结束当前会话。
限制与平台说明#
共享解析器没有整体字符串长度或重复次数上限。重复次数和延时按无符号 32 位保存,滚轮位移按有符号 32 位保存;超范围转换可能回绕,请使用实际需要的小次数和短延时。未知键名或缺少必要参数会报解析错误,编辑器会在输入时校验。
Windows 在线程中发送序列,{SLEEP ms} 会等待。Mac 使用计时器分批发送:动作字符串超过 16,384 字节会拒绝;Lua 已解析序列限制为 16,384 个动作,单个文本动作最多 16,384 字节。等待队列最多容纳 64 项,超出会丢弃并记日志。
Mac 支持 F1–F20、小键盘数字和已映射的导航键;Insert/INS、PRTSC、BREAK、F21–F24、媒体/音量及鼠标/滚轮记号尚不支持,会跳过。媒体和音量请使用“媒体与系统”。ms.keys_down 和 ms.keys_up 仅 Windows 支持,详见 Lua API。