# BlockInput

开启或关闭用户通过鼠标和键盘与计算机交互的能力。

BlockInput, Mode

#### 参数

Mode | Mode 1: 是下列的一个单词： On: 用户被阻止与计算机交互(鼠标和 键盘输入无效)。 Off: 输入被重新启用。 Mode 2 (在 Windows 9x 上无效): 此模式独立于其他两个模式进行操作。例如，BlockInput On 将继续阻止输入直到 BlockInput Off 被使用，即使下面的某个单词也在生效。 Send: 用户的鼠标和键盘输入在 Send 或 SendRaw 命令正进行时将被忽略(仅对传统的 SendEvent mode(发 送事件模式) 而言)。此参数阻止用户的键击去扰乱模拟的键击流程。当 Send 命令结束时，输入被重新启用(除非仍然被之前使用的一个 BlockInput On 阻止)。 Mouse: 用户的鼠标和键盘输入在 Click 、MouseMove 、MouseClick 或 MouseClickDrag 命令正进行时被忽略(仅对传统的 SendEvent mode 而言)。此参数阻止用户的鼠标移动和点击去扰乱模拟的鼠标事件。当鼠标命令结束时，输入被重新启用(除非仍然被之前使用的一个 BlockInput On 阻止)。 SendAndMouse: 上面两种参数模式的组合。 Default: 关掉 Send 和 Mouse 两种参数模式，但不改变当前阻止的输入状态。例如，如果 BlockInput On 当前生效中，使用 BlockInput Default 不会将它关掉。 Mode 3 (在 Windows 9x 上无效；需要 v1.0.43.11+): 此模式独立于其他两个模式进行操作。例如，如果 BlockInput On 和 BlockInput MouseMove 同时生效中，鼠标移动将被一直阻止直到两个模式都关掉。 MouseMove: 鼠标指针不会对用户的物理的鼠标移动做出反应而移动(DirectInput 程序可能是一个例外)。当脚本第一次使用此命令时， mouse hook(鼠标钩子) 被装载(如果它还没被装载的话)。另外，脚本变成 persistent(持 久的)，意味着应该使用 ExitApp 命令来终止它。鼠标钩子会继续处于装载状态直到下次使用了 Suspend 或 Hotkey 命令，在那时如果不被任何热键或热字串需要的话，它将被移除(见 #Hotstring NoMouse)。 MouseMoveOff: 允许用户移动鼠标指针。

#### 注意

优先于 BlockInput，最好使用 SendMode Input 或 SendMode Play 以便键击和鼠标点击变得不可中断。这是因为不像 BlockInput，那些模式在发送期间不会抛弃用户输入的东西；而是将这些键击缓存起来并在之后发送。避免用 BlockInput 同样避开了像下面段落中描述的需要解决粘滞按键的情况。

如果在用户按住按键时 BlockInput 变为激活状态，可能导致这些按键"卡住"。这种情况可以通过在启用 BlockInput 前等待按键被松开来避免发生，像在这个例子中一样：

    ^!p::
    KeyWait Control ; 等待按键被松开。为每一个热键的修饰键使用一个 KeyWait 。
    KeyWait Alt
    BlockInput On
    ; ... 发送键击和鼠标点击 ...
    BlockInput Off
    return

输入阻止即刻自动地关闭每当一个 ALT 事件发送时(之后重新启用)。

下面的表格显示了 BlockInput 的表现如何随着 Windows 的版本而改变；不过，由于一个 Windows API 的特性，在任何一个平台上按 Ctrl+Alt+Del 将重新启用输入。

操作系统 | "BlockInput" 效果
Windows 95 | 无效。
Windows 98/Me | 用户输入被阻止并且 AutoHotkey 不能模 拟输入。
Windows NT 4 (without ServicePack 6) | 无效。
Windows NT 4 (w ith ServicePack 6) | 用户输入被阻止，不过 AutoHotkey 能模拟键击和鼠标点击。
Windows 2000/XP | 用户输入被阻止，不过 AutoHotkey 能模拟键击和鼠标点击。

Windows 98/Me: 虽然在 BlockInput 期间脚本不能在那些操作系统上发送鼠标点击和键击，但像 WinMove 这样的命令仍能起作用。ControlSend 也许也能工作。

某些类型的 hook hotkeys 当 BlockInput 打开时仍能被触发。包括像 "MButton" (鼠标钩子) 和 "LWin & Space" (用明确的前缀而不是修饰符 "$#" 的键盘钩子)这样的例子.

当脚本关闭时，输入被自动地重新启用。

#### 相关命令

SendMode, Send, Click, MouseMove, MouseClick, MouseClickDrag

#### 示例

    if A_OSType <> WIN32_WINDOWS ; 也就是说不是 Windows 9x 。
    BlockInput, on
    Run, notepad
    WinWaitActive, 无标题 - 记事本
    Send, {F5} ; 粘贴时间和日期
    BlockInput, off

翻译：天堂之门 menk33@163.com 2008年8月6日