SendLevel
控制热键和热字串是否忽略模拟的键盘和鼠标事件.
SendLevel Level
参数
- Level
-
类型: 整数
介于 0 和 100 之间的整数.
默认情况下, 钩子热键和热字串会忽略由任何 AutoHotkey 脚本生成的键盘和鼠标事件. 在某些情况下, 你可能希望覆盖这种行为; 例如, 可使用重映射键来触发其他热键. SendLevel 和 #InputLevel 提供了实现此目的的方法.
SendLevel 设置由当前脚本线程生成的事件级别, 而 #InputLevel 设置在它下面的所有热键或热字串的级别. 要让脚本生成的事件触发钩子热键或热字串, 则此事件的发送级别必须高于热键或热字串的输入级别.
兼容性:
- SendPlay 不受 SendLevel 影响.
- SendInput 会受 SendLevel 影响, 但在 SendInput 执行时其所在脚本中的钩子热键无法激活, 因为它会让钩子暂时失效. 但是, 当 Send 或 SendInput 恢复为 SendEvent, 它可以激活脚本自己的热键.
- 使用 "reg" 方法实现的热键不能区分物理和模拟输入, 所以不会受 SendLevel 的影响. 然而, 级别高于 0 的热键总是使用了键盘或鼠标钩子.
- 热字串仅使用 #InputLevel 来确定最后一个键入的字符是否应该触发热字串. 例如, 无论 #InputLevel 设置如何, 热字串
::btw::
都可以通过级别为 1 或更高级别的发送 btw
和物理输入结束字符来触发. 这是因为热字串识别的工作原理是将除 0 级以外的所有级别的输入收集到单个全局缓冲区中.
- 自动替换型热字串生成事件的级别始终为 0, 因为通常在替换文本时不希望触发其他热字串或热键. 要解决此问题, 请使用非自动替换型热字串和 SendEvent 函数.
- 即使使用了 SendLevel, 通过 ASC (Alt+nnnnn) 方法发送字符也不能触发热字串.
- 通过 SendEvent 的 {Text} 模式, {U+nnnn} 或 Unicode fallback method 发送字符可以触发热字串.
内置变量 A_SendLevel 包含了当前设置.
每个新启动的热键或热字串线程都以一个等于热键或热字串输入级别的发送级别开始. 每个新启动的其他线程(例如, 自定义菜单项或计时子程序) 会以其默认设置开始, 一般为 0, 不过可以在脚本启动中使用此函数进行改变.
如果在脚本启动中使用 SendLevel, 它还会影响键盘和鼠标的重映射.
#InputLevel, Send, Click, MouseClick, MouseClickDrag
示例
SendLevel 允许触发另一个脚本的热键和热字符串, 而通常情况下是不会的.
SendLevel 1
Send "btw{Space}" ; 生成 "by the way ".
; 这可以在单独的脚本中定义:
::btw::by the way
unixetc