开启或关闭用户通过鼠标和键盘与计算机交互的能力。
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 (with 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