# SendLevel [v1.1.06+]

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

    SendLevel, Level

## 参数

Level

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

## 一般说明

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

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

兼容性:

- SendPlay 不受 SendLevel 影响.
- SendInput 会受 SendLevel 的影响, 但在 SendInput 执行时其所在脚本中的钩子热键无法激活, 因为这个命令会让钩子暂时失效. 但是, 当 Send 或 SendInput 恢复为 SendEvent 时, 它可以激活脚本自己的热键.
- 使用 "reg" 方法实现的热键不能区分物理和模拟输入, 所以不会受 SendLevel 的影响. 然而, 级别高于 0 的热键总是使用了键盘或鼠标钩子.
- 热字串仅使用 #InputLevel 来确定最后一个键入的字符是否应该触发热字串. 例如, 无论 #InputLevel 是什么, 都可以通过级别为 1 或更高级别的发送 `btw` 和物理输入结束字符来触发热字串 `::btw::`. 这是因为热字串识别的工作原理是将除 0 级以外的所有级别的输入收集到单个全局缓冲区中.
- 自动替换型热字串生成事件的级别总是为 0, 因为通常在替换文本时不希望触发其他热字串或热键. 要变通解决此问题, 请使用非自动替换型热字串和 SendEvent 命令.
- 即使使用 SendLevel, 通过 ASC (Alt+nnnnn) 的方法发送字符也不能触发热字串.
- 通过 SendEvent 的 {Text} 模式发送字符, {U+nnnn} 或 Unicode fallback method 可以触发热字串.

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

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

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

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

## 相关

#InputLevel, Send, Click, MouseClick, MouseClickDrag

## 示例

SendLevel 允许触发另一个脚本的热键和热字符串, 而通常情况下是不会的.

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

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

dftg