Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "BlockInput", в содержании - "Keyboard Control" - "BlockInput", v1.0.47.06.

Ник переводчика: YMP.

Настоящее имя переводчика: Юрий Попов.

BlockInput

Блокирует или разблокирует ввод с клавиатуры и мыши.

BlockInput, Mode

Параметры

Mode (режим) Режим 1: Одно из следующих слов:

On: Ввод с клавиатуры и мыши блокируется.

Off: Ввод разблокируется.

Режим 2 (не действует в Windows 9x): Этот режим работает независимо от двух других. Например, BlockInput On будет продолжать блокировать ввод до момента выполнения команды BlockInput Off, даже если одновременно с этим работает какая-то из нижеследующих команд.

Send: Ввод с клавиатуры и мыши игнорируется на то время, пока выполняются команды Send или SendRaw (только при режиме посылки SendEvent). Это не позволяет действиям пользователя прерывать поток нажатий, симулируемых скриптом. Когда Send завершает работу, ввод разблокируется (если до этого он не был блокирован через BlockInput On).

Mouse: Ввод с клавиатуры и мыши блокируется на время выполнения команд Click, MouseMove, MouseClick или MouseClickDrag (только для режима посылки SendEvent). Когда команда завершает работу, ввод разблокируется (если он не был до этого блокирован через BlockInput On).

SendAndMouse: Сочетание двух предыдущих команд.

Default: Отменяет действие команд BlockInput Send и BlockInput Mouse (но не влияет на работу команды BlockInput On).

Режим 3: (не действует в Windows 9x; работает, начиная с версии 1.0.43.11) Этот режим действует независимо от двух других. Например, если одновременно выполняются BlockInput On и BlockInput MouseMove, движения мыши будут заблокированы, пока не будут отменены обе эти команды.

MouseMove: Указатель мыши не будет реагировать на физические перемещения мыши пользователем (возможные исключения - приложения, использующие DirectInput). Когда в скрипте впервые выполняется эта команда, устанавливается хук мыши (если он уже не установлен). Кроме того, скрипт становится резидентным, что означает, что для его завершения требуется команда ExitApp. Хук мыши остаётся установленным до момента выполнения команд Suspend или Hotkey, после этого он удаляется, если не требуется для каких-либо горячих клавиш или строк автозамены (см. описание #Hotstring NoMouse).

MouseMoveOff: Разблокирует указатель мыши.

Примечания

Вместо BlockInput часто предпочтительнее использовать SendMode Input или SendMode Play, которые также не позволяют действиям пользователя прерывать нажатия клавиш и щелчки мыши, симулируемые скриптом, но которые при этом не отбрасывают то, что пользователь печатает во время посылки; его нажатия запоминаются и посылаются позже. Неиспользование BlockInput также устраняет необходимость принимать меры против залипания клавиш, как это описано в следующем абзаце.

Если BlockInput активируется в тот момент, когда пользователь удерживает нажатыми какие-то клавиши, эти клавиши могут "залипнуть" в нажатом состоянии. Этого можно избежать, если подождать отпускания клавиш перед применением блокировки, как показано в этом примере:

^!p::
KeyWait Control  ; Ждать отпускания клавиши. Используйте одну команду
                 ; KeyWait для каждого модификатора горячей клавиши.
KeyWait Alt
BlockInput On
; ... посылаются нажатия и щелчки мыши ...
BlockInput Off
return

Блокировка ввода автоматически отключается всякий раз, когда посылается событие, связанное с клавишей ALT (и включается после этого).

Таблица ниже показывает, как меняется поведение BlockInput в зависимости от версии Windows; однако нажатие Ctrl+Alt+Del разблокирует ввод в любой из них.


Операционная системаРезультаты BlockInput
Windows 95 Никакого эффекта.
Windows 98/Me Ввод пользователя блокируется, и AutoHotkey также неспособен симулировать ввод.
Windows NT 4 (без сервиспака 6) Никакого эффекта.
Windows NT 4 (с сервиспаком 6) Ввод пользователя блокируется, но AutoHotkey способен симулировать нажатия клавиш и щелчки мыши.
Windows 2000/XP Ввод пользователя блокируется, но AutoHotkey способен симулировать нажатия клавиш и щелчки мыши.

Windows 98/Me: Хотя скрипт не может посылать нажатия клавиш и щелчки мыши в этих операционных системах, когда ввод заблокирован, но такие команды как WinMove всё же будут работать. Возможно, сработает и ControlSend.

Некоторые типы горячих клавиш, реализуемые с помощью хуков мыши и клавиатуры, всё же способны работать, когда ввод заблокирован. Например, "MButton" (хук мыши) и "LWin & Space" (хук клавиатуры и явное указание префикса вместо модификаторов "$#").

Ввод автоматически разблокируется, когда скрипт закрывается.

Пример

if A_OSType <> WIN32_WINDOWS ; Если ОС - не Windows 9x.
    BlockInput, on
Run, notepad
WinWaitActive, Безымянный - Блокнот
Send, {F5} ; Вставляет время и дату.
BlockInput, off

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.