5

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

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

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

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

2 ответа2

1

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

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

Если допустимо потерять пользовательский ввод, пока он заморожен (вместо буферизации и последующей отправки), вы можете использовать BlockInput. Что-то вроде

BlockInput On
; Send desired text here
BlockInput Off

Тем не менее, документация BlockInput гласит, что если он запускается, когда ключи уже не работают, он может заблокировать события "повышение ключа" и привести к зависанию ключей. Таким образом, в зависимости от того, когда вы его используете, вам, возможно, придется сначала дождаться выпуска ключей с помощью KeyWait.

-2

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

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

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

Вы сказали:

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

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

Команда ввода выполняет:

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

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}

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .