# InstallKeybdHook

安装或卸载键盘钩子.

    InstallKeybdHook Install, Force

## 参数

Install

  类型: 布尔值

  省略此参数或传递 true(任何非零, 非空白值) 来要求钩子被安装. 传递 false 删除此函数之前设置的任何要求, 并可能卸载钩子.

Force

  类型: 布尔值

  如果 Force 为 true, 并且 Install 省略或为 true, 钩子会被卸载和重新安装. 这具有使其优先于其他进程先前安装的钩子的效果. 如果系统由于一个无响应的程序而停止调用该钩子, 重新安装该钩子可能会使其再次工作.

  如果 Force 为 true, 并且 Install 为 false, 那么钩子就会被卸载, 即使是其他目的需要. 如果热键, 热字串或 InputHook 需要钩子, 它将停止工作, 直到该钩子被重新安装. 钩子可以通过调用这个函数显式地被重新安装, 也可以作为启用或禁用热键或调用其他需要钩子的函数的副作用而自动安装.

  如果 Force 为 false, 内部变量会被更新, 以表明脚本是否需要钩子, 但是如果钩子是其他目的而需要的, 可能不会有直接的变化.

## 备注

键盘钩子监视击键, 以便激活热字串和任何 RegisterHotkey(操作系统内置的函数) 不支持的键盘热键. 它还支持其他一些特性, 如 InputHook 函数.

AutoHotkey 不会无条件安装键盘和鼠标钩子, 因为它们合起来至少占用 500 KB 的内存. 因此, 通常仅在脚本包含以下内容之一时才会安装键盘钩子: 1) 热字串; 2) 一个或多个需要键盘钩子(大多数不需要) 的热键; 3) SetCaps/Scroll/NumLock AlwaysOn/AlwaysOff; 4) 激活 Input 钩子.

与之相比, InstallKeybdHook 函数可以用来无条件安装键盘钩子, 它的好处包括:

- KeyHistory 可以用来显示最近的 20 次击键(用于调试).
- 可以可靠地跟踪修饰符键的物理状态, 这就消除了 A_HotkeyModifierTimeout 的需要, 并且可以提高 Send 将临时释放的修饰符键恢复到合适状态的可靠性.
- GetKeyState 可以检索到一个键的物理状态.
- A_TimeIdleKeyboard 和 A_TimeIdlePhysical 可以正确工作(分别忽略鼠标输入和人工输入).
- 使用 Alt 修饰符的鼠标热键(如 `!LButton::`) 可以更有效地抑制窗口菜单, 当 Alt 键释放时只发送一个菜单掩饰键, 而不是每次单击按钮时发送一个.

不需要钩子的键盘热键将使用 reg 方法, 即使使用 InstallKeybdHook 函数. 相比之下, 将 #UseHook 指令或 $ 前缀应用于键盘热键, 强制需要钩子, 如果热键被启用, 就会导致钩子被安装.

你可以通过 KeyHistory 函数或菜单项来确定脚本是否在使用钩子. 你可以通过 ListHotkeys 函数或菜单项来确定哪些热键正在使用钩子.

## 相关

InstallMouseHook, #UseHook, Hotkey, InputHook, KeyHistory, Hotstrings, GetKeyState, KeyWait

## 示例

无条件安装键盘钩子.

    InstallKeybdHook

dftg