BlockInput


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

BlockInput, Mode

参数

Mode

Mode 1: 是下列的一个单词:

On: 用户被阻止与计算机交互(鼠标和 键盘输入无效)。

Off: 输入被重新启用。

Mode 2 (在 Windows 9x 上无效): 此模式独立于其他两个模式进行操作。例如,BlockInput On 将继续阻止输入直到 BlockInput Off 被使用,即使下面的某个单词也在生效。

Send: 用户的鼠标和键盘输入在 SendSendRaw 命令正进行时将被忽略(仅对传统的 SendEvent mode(发 送事件模式) 而言)。此参数阻止用户的键击去扰乱模拟的键击流程。当 Send 命令结束时,输入被重新启用(除非仍然被之前使用的一个 BlockInput On 阻止)。

Mouse: 用户的鼠标和键盘输入在 ClickMouseMoveMouseClickMouseClickDrag 命令正进行时被忽略(仅对传统的 SendEvent mode 而言)。此参数阻止用户的鼠标移动和点击去扰乱模拟的鼠标事件。当鼠标命令结束时,输入被重新启用(除非仍然被之前使用的一个 BlockInput On 阻止)。

SendAndMouse: 上面两种参数模式的组合。

Default: 关掉 SendMouse 两种参数模式,但不改变当前阻止的输入状态。例如,如果 BlockInput On 当前生效中,使用 BlockInput Default 不会将它关掉。

Mode 3 (在 Windows 9x 上无效;需要 v1.0.43.11+): 此模式独立于其他两个模式进行操作。例如,如果 BlockInput OnBlockInput MouseMove 同时生效中,鼠标移动将被一直阻止直到两个模式都关掉。

MouseMove: 鼠标指针不会对用户的物理的鼠标移动做出反应而移动(DirectInput 程序可能是一个例外)。当脚本第一次使用此命令时, mouse hook(鼠标钩子) 被装载(如果它还没被装载的话)。另外,脚本变成 persistent(持 久的),意味着应该使用 ExitApp 命令来终止它。鼠标钩子会继续处于装载状态直到下次使用了 SuspendHotkey 命令,在那时如果不被任何热键或热字串需要的话,它将被移除(见 #Hotstring NoMouse)。

MouseMoveOff: 允许用户移动鼠标指针。

注意

优先于 BlockInput,最好使用 SendMode InputSendMode 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
翻译:天堂之门 menk33@163.com 2008年8月6日