
В моем скрипте 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}
Вы можете выполнить цикл для нескольких ключей или принять строку ключей в качестве аргумента.