# #HotkeyModifierTimeout

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

    #HotkeyModifierTimeout Milliseconds

## 参数

Milliseconds

  类型: 整数

  间隔长度, 以毫秒为单位. 此值设为 -1 时, 它永远不会超时(在 Send 后修饰键总是被推回到按下的状态), 设为 0 时, 总是超时(修饰键总是不会被推回到按下的状态).

## 备注

在下列情况中 不需要 使用此指令:

- 热键通过 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, 这应该会有所帮助, 因为它可以更快地发送击键.

如果脚本中未使用此指令, 那么它会表现得就像此设置为 50.

和其他指令一样, #HotkeyModifierTimeout 不能有条件地执行.

## 相关

GetKeyState

## 示例

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

    #HotkeyModifierTimeout 100

dftg