SendLevel

AutoHotKey

SendLevel [v1.1.06+]

控制热键和热字串是否忽略模拟的键盘和鼠标事件.

SendLevel, Level

参数

Level

介于 0 和 100 之间的整数, 可以为 表达式.

一般说明

默认情况下, 钩子 热键热字串 会忽略由任何 AutoHotkey 脚本生成的键盘和鼠标事件. 在某些情况下它可用于覆盖默认行为; 例如, 可使用重映射键来触发其他热键. SendLevel 和 #InputLevel 提供了实现此目的的方法.

SendLevel 设置由当前 脚本线程 生成的事件级别, 而 #InputLevel 设置它下面所有热键或热字串的级别. 要让脚本生成的事件触发钩子热键或热字串, 则此事件的发送级别必须高于热键或热字串的输入级别.

兼容性:

  • SendPlay 不受 SendLevel 影响.
  • SendInput 会受 SendLevel 的影响,但在 SendInput 执行时其所在脚本中的钩子热键无法激活,因为这个命令会让钩子暂时失效.
  • 使用 "reg" 方法实现的热键不能区分物理和模拟输入, 所以不会受 SendLevel 的影响. 然而, 级别高于 0 的热键总是使用了键盘或鼠标钩子.
  • 自动替换型 热字串 生成事件的级别总是为 0, 因为通常在替换文本时不希望触发其他热字串或热键. 要变通解决此问题, 请使用非自动替换型热字串和 Send 命令.
  • 任何没有与当前键盘布局中的按键相对应的字符都无法触发热字串,即使使用 SendLevel 也不行.这是热字串识别程序的限制.

[v1.1.23+]: 内置变量 A_SendLevel 包含当前设置.

每个新运行的热键或热字串 线程 初始的发送级别等于此热键或热字串的 输入级别. 每个新运行的其他线程 (例如 自定义菜单项定时 子程序) 都会以默认设置开始, 一般为 0, 不过可以在 自动执行段 中使用此命令进行改变.

如果在 自动执行段 中使用 SendLevel, 它还会影响 键盘和鼠标重映射.

早于 v1.1.06 的 AutoHotkey 版本会表现的就像 #InputLevel 0SendLevel 0 那样.

相关

#InputLevel, Send, Click, MouseClick, MouseClickDrag

示例

SendLevel 1
Send btw{Space} ; 生成 "by the way ".

; 这可以在其他脚本中定义:
::btw::by the way