# HotIf / HotIfWin

指定后续创建或修改热键变体的条件.

目录:

- HotIf
- HotIfWin...
- 备注
- 示例

## HotIf

    HotIf "Expression"
    HotIf Function

### 参数

(省略参数)

  设置空白条件(关闭上下文相关性).

"Expression"

  Type: String

  为现有的 #HotIf 表达式设置条件. Expression 通常写成一个加引号字符串, 但也可以是一个变量或表达式, 返回与 #HotIf 表达式匹配的文本. 虽然这个函数不能创建新的表达式, 但它可以使用现有的表达式创建新的热键. 请参阅 #HotIf 示例 5.

  注意: HotIf 函数使用你传递给它的字符串, 而不是原始源代码. 当脚本加载时, 转义序列会被解析, 所以只考虑结果字符; 例如, `HotIf 'x = "`t"'` 和 `HotIf 'x = "' A_Tab '"'` 都对应于 `#HotIf x = "`t"`.

Function

  Type: Function Object

  为给定的函数对象设置条件. 随后创建的热键只有在调用给定的函数对象产生一个非零的数字时才会执行. 这类似于 `HotIf "Expression"`, 只不过每个热键可以有很多变体(每个对象一个). Function 必须是具有一个 call 方法的对象, 该方法接受一个参数, 即热键的名称.

  一旦传递给 HotIf 函数, 该对象将永远不会被删除(但进程退出时, 内存将被操作系统回收).

  "三键组合" 热键的例子使用了 HotIf 这种模式.

## HotIfWin...

    HotIfWinActive WinTitle, WinText
    HotIfWinExist WinTitle, WinText
    HotIfWinNotActive WinTitle, WinText
    HotIfWinNotExist WinTitle, WinText

### 参数

(省略所有参数)

  设置空白条件(关闭上下文相关性).

WinTitle, WinText

  指定用于识别窗口的窗口标题和其他条件. 根据所调用的函数, 受影响的热键和热字符串只有在匹配的窗口处于活动状态, 存在, 不活动, 或不存在时才会被激活.

  由于参数在函数被调用之前就已经被计算了, 因此任何变量引用都会在那一刻成为永久性的. 换句话说, 变量内容的后续变化不会被现有的热键看到.

  WinTitle 和 WinText 的含义与 WinActive 或 WinExist 中的相同, 但它们使用自动执行线程设置的 SetTitleMatchMode 和 DetectHiddenWindows 的默认设置. 有关详情, 请参阅 WinTitle.

## 错误处理

如果 HotIf 的参数无效, 例如它不匹配现有的表达式, 并且不是一个有效的回调函数, 则抛出异常.

## 备注

HotIf 允许在脚本运行时创建和修改上下文相关的热键(相比之下, #HotIf 指令是位置性的, 在脚本开始执行前生效). 例如:

    HotIfWinActive "ahk_class Notepad"
    Hotkey "^!e", MyFuncForNotepad  ; 创建一个只在记事本中工作的热键.

使用 HotIf 会使当前线程中把所有随后创建或修改的热键都变成上下文相关的, 并影响 Hotkey 函数修改哪些热键变体. 只有最近一次对当前线程中任何 HotIf 函数的调用才会生效.

要关闭上下文相关性(也就是说, 使后续创建的热键在所有窗口中工作), 调用任意 HotIf 函数, 但省略参数. 例如: `HotIf` 或 `HotIfWinActive`.

在热键或热字串线程中使用 HotIf 之前, 热键和热串函数默认与启动该线程的热键或热串的上下文相同. 换句话说, `Hotkey A_ThisHotkey, "Off"` 关闭当前热键, 即使它是上下文相关的. 所有其他线程都默认创建或修改全局热键, 除非在脚本启动时使用 HotIf 覆盖了该默认值.

使用 HotIf 函数或指令禁用鼠标或键盘热键后, 它会执行其原来的功能; 也就是说, 它传递到活动窗口, 就好像不存在热键一样. 然而, 操纵杆热键总是有效, 无论禁用与否.

## 相关

Hotkey(函数), 热键(描述), #HotIf, 线程

## 示例

有关示例, 请参阅 Hotkey.

dftg