Замораживание пользовательского ввода с помощью AutoHotKey

Замораживание пользовательского ввода с помощью AutoHotKey

В моем скрипте AutoHotKey я хочу заморозить пользовательский ввод, т. е. любой ввод пользователя не будет передаваться в активную программу, а затем разморозить его и передать весь ввод, введенный пользователем, в программу.

Другими словами: я замираю, затем пользователь набирает «xyz», но этонетпередается активной программе, а затем я размораживаю ее, нажатия клавиш «xyz» передаются программе, а затем все возвращается в нормальное состояние, и пользователь может снова печатать, и она переходит к активной программе.

Это делается для того, чтобы при вводе текста в программу с помощью ControlSend, ввод текста пользователем не мешал.

Возможно? Как?

решение1

Если вы можете отправить весь текст с помощью одного SendInput, то AutoHotkey решит эту проблему за вас. Из AutoHotkeyОтправлятьдокументация,

SendInput и SendPlay [...] буферизуют любую физическую активность клавиатуры или мыши во время отправки, что предотвращает перемежение нажатий клавиш пользователем и отправляемых данных.

Если допустимо потерять пользовательский ввод, пока он заморожен (вместо того, чтобы буферизировать его и отправлять позже), можно использоватьБлокВвода. Что-то вроде

BlockInput On
; Send desired text here
BlockInput Off

Однако в документации BlockInput говорится, что если он запускается, когда клавиши уже нажаты, он может блокировать события "key up" и вызывать застревание клавиш. Поэтому в зависимости от того, когда вы его используете, вам, возможно, придется сначала дождаться отпускания клавиш с помощьюКлючПодождите.

решение2

Используйте команду «Ввод».

http://autohotkey.free.fr/docs/commands/Input.htm

редактировать

Вы сказали:

В моем скрипте AutoHotKey я хочу заморозить пользовательский ввод, т. е. любой ввод пользователя не будет передаваться в активную программу, а затем разморозить его и передать весь ввод, введенный пользователем, в программу.

Другими словами: я замораживаю, затем пользователь набирает «xyz», но это не передается в активную программу, затем я размораживаю, нажатия клавиш «xyz» передаются в программу, а затем все возвращается в нормальное состояние, пользователь может снова печатать, и это переходит в активную программу.

Команда Input выполняет следующие действия:

; Подождите, пока пользователь нажмет любую клавишу. Клавиши, которые не производят видимых символов, такие как клавиши-модификаторы, функциональные клавиши и клавиши со стрелками, перечислены как конечные клавиши, поэтому они также будут обнаружены.

Input, SingleKey, L1, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}

Вы можете выполнить цикл для нескольких ключей или принять строку ключей в качестве аргумента.

Связанный контент