# A_HotkeyModifierTimeout

影响带以下热键修饰符的 Send 的行为: `Ctrl`, `Alt`, `Win` 和 `Shift`.

内置变量 A_HotkeyModifierTimeout 定义了热键被按下后, 其修饰符键被认为仍然被按住的时间. 这被 Send 用来决定在暂时释放修饰符键后是否再按下它们.

Value

  类型: 整数

  间隔的长度, 以毫秒为单位. 该值可以是 -1, 这样它就永远不会超时(修饰符键总是在 Send 后被再次按下), 或 0 这样它总是超时(修改键永远不会被再次按下).

  默认值为 50.

## 备注

此变量在以下情况下无效:

- 热键通过 SendInput 或 SendPlay 方法发送键击. 这是因为这些方法将用户的物理按键操作和释放延迟到 Send 完成之后.
- 脚本已经安装了键盘钩子(您可以通过主窗口中的 "View->Key history" 菜单项或 KeyHistory 函数来判断你的脚本是否使用了钩子). 这是因为钩子可以跟踪用户实际按住的修饰键(`Alt`/`Ctrl`/`Win`/`Shift`), 不需要使用超时.

为了说明此指令的效果, 请参考这个例子: `^!a::Send "abc"`.

执行 Send 函数时, 它会首先释放 `Ctrl` 和 `Alt`, 以便正确发送字符. 在发送所有键击后, 此函数不知道它是否可以安全的推回 `Ctrl` 和 `Alt` 到按下状态(以匹配用户是否仍然按下它们). 但是, 如果经过的时间少于指定的毫秒数, 则将假定用户尚未有释放键的机会, 因此它将推回它们以使其符合其物理状态. 否则, 修饰键将不会被推回按下状态, 用户必须再次按下它们来修饰同一个或其他的按键.

超时值应设置为小于用户通常在释放热键的修饰键之前按住它们的时间. 否则, 即使用户没有实际按下修饰键, 修饰键也可能恢复到向下位置(保持按下).

在下列情况中您可以减少或不使用此变量:

- 通过调用 InstallKeybdHook 安装键盘钩子.
- 使用 SendInput 或 SendPlay 方法而不使用传统的 SendEvent 方法.
- 使用传统的 SendEvent 方法, 将 SetKeyDelay 减少到 0 或 -1, 这应该会有所帮助, 因为它可以更快地发送击键.

## 相关

GetKeyState

## 示例

将热键修饰符超时设置为 100 毫秒, 而不是 50 毫秒.

    A_HotkeyModifierTimeout := 100

dftg