# BlockInput

Disables or enables the user's ability to interact with the computer via keyboard and mouse.

    BlockInput, Mode

### Parameters

Mode | Mode 1: One of the following words: On: The user is prevented from interacting with the computer (mouse and keyboard input has no effect). Off: Input is re-enabled. Mode 2 (has no effect on Windows 9x): This mode operates independently of the other two. For example, BlockInput On will continue to block input until BlockInput Off is used, even if one of the below is also in effect. Send: The user's keyboard and mouse input is ignored while a Send or SendRaw is in progress (the traditional SendEvent mode only). This prevents the user's keystrokes from disrupting the flow of simulated keystrokes. When the Send finishes, input is re-enabled (unless still blocked by a previous use of BlockInput On). Mouse: The user's keyboard and mouse input is ignored while a Click, MouseMove, MouseClick, or MouseClickDrag is in progress (the traditional SendEvent mode only). This prevents the user's mouse movements and clicks from disrupting the simulated mouse events. When the mouse command finishes, input is re-enabled (unless still blocked by a previous use of BlockInput On). SendAndMouse: A combination of the above two modes. Default: Turns off both the Send and the Mouse modes, but does not change the current state of input blocking. For example, if BlockInput On is currently in effect, using BlockInput Default will not turn it off. Mode 3 (has no effect on Windows 9x; requires v1.0.43.11+): This mode operates independently of the other two. For example, if BlockInput On and BlockInput MouseMove are both in effect, mouse movement will be blocked until both are turned off. MouseMove: The mouse cursor will not move in response to the user's physical movement of the mouse (DirectInput applications are a possible exception). When a script first uses this command, the mouse hook is installed (if it is not already). In addition, the script becomes persistent, meaning that ExitApp should be used to terminate it. The mouse hook will stay installed until the next use of the Suspend or Hotkey command, at which time it is removed if not required by any hotkeys or hotstrings (see #Hotstring NoMouse). MouseMoveOff: Allows the user to move the mouse cursor.

### Remarks

In preference to BlockInput, it is often better to use SendMode Input or SendMode Play so that keystrokes and mouse clicks become uninterruptible. This is because unlike BlockInput, those modes do not discard what the user types during the send; instead, those keystrokes are buffered and sent afterward. Avoiding BlockInput also avoids the need to work around sticking keys as described in the next paragraph.

If BlockInput becomes active while the user is holding down keys, it might cause those keys to become "stuck down". This can be avoided by waiting for the keys to be released prior to turning BlockInput on, as in this example:

    ^!p::
    KeyWait Control  ; Wait for the key to be released.  Use one KeyWait for each of the hotkey's modifiers.
    KeyWait Alt
    BlockInput On
    ; ... send keystrokes and mouse clicks ...
    BlockInput Off
    return

Input blocking is automatically and momentarily disabled whenever an ALT event is sent (then re-enabled afterward).

The table below shows how BlockInput behavior varies depending on Windows' version; however, pressing Ctrl+Alt+Del on any platform will re-enable input due to a Windows API feature.

Operating System | "BlockInput" Results
--- | ---
Windows 95 | No effect.
Windows 98/Me | User input is blocked and AutoHotkey is unable to simulate input.
Windows NT 4 (without ServicePack 6) | No effect.
Windows NT 4 (with ServicePack 6) | User input is blocked but AutoHotkey can simulate keystrokes and mouse clicks.
Windows 2000/XP | User input is blocked but AutoHotkey can simulate keystrokes and mouse clicks.

Windows 98/Me: Although scripts are unable to send keystrokes and mouse clicks on these operating systems during BlockInput, commands such as WinMove will still work. ControlSend might also work.

Certain types of hook hotkeys can still be triggered when BlockInput is on. Examples include "MButton" (mouse hook) and "LWin & Space" (keyboard hook with explicit prefix rather than modifiers "$#").

Input is automatically re-enabled when the script closes.

### Related

SendMode, Send, Click, MouseMove, MouseClick, MouseClickDrag

### Example

    if A_OSType <> WIN32_WINDOWS ; i.e. it's not Windows 9x.
        BlockInput, on
    Run, notepad
    WinWaitActive, Untitled - Notepad
    Send, {F5} ; pastes time and date
    BlockInput, off