Einfrieren von Benutzereingaben mit AutoHotKey

Einfrieren von Benutzereingaben mit AutoHotKey

In meinem AutoHotKey-Skript möchte ich die Benutzereingabe einfrieren, d. h. alle Eingaben des Benutzers werden nicht an das aktive Programm weitergegeben. Anschließend möchte ich die Eingabe wieder aufheben und alle vom Benutzer eingegebenen Eingaben an das Programm weitergeben.

Mit anderen Worten: Ich friere ein, dann tippt der Benutzer "xyz", aber das istnichtan das aktive Programm übergeben, und dann beende ich die Eingabe, die Tastenanschläge „xyz“ werden an das Programm übergeben, und dann ist alles wieder normal und der Benutzer kann erneut tippen und es wird an das aktive Programm weitergeleitet.

ControlSendAuf diese Weise kann ich verhindern, dass die Tipparbeit des Benutzers mich stört, während ich mithilfe von eine Menge Text in das Programm eingebe .

Möglich? Wie?

Antwort1

Wenn Sie Ihren gesamten Text mit einem SendInput senden können, dann kümmert sich AutoHotkey um das Problem für Sie. Über das AutoHotkeySchickenDokumentation,

SendInput und SendPlay [...] puffern jegliche physische Tastatur- oder Mausaktivität während des Sendens, wodurch verhindert wird, dass die Tastenanschläge des Benutzers mit den Sendeanschlägen vermischt werden.

Wenn es akzeptabel ist, die Benutzereingabe zu verlieren, während sie eingefroren ist (anstatt sie zu puffern und anschließend zu senden), können Sie verwendenBlockEingabe. Etwas wie

BlockInput On
; Send desired text here
BlockInput Off

In der BlockInput-Dokumentation heißt es jedoch, dass, wenn es gestartet wird, während die Tasten bereits gedrückt sind, es die „Taste loslassen“-Ereignisse blockieren kann und dazu führen kann, dass die Tasten gedrückt erscheinen. Je nachdem, wann Sie es verwenden, müssen Sie möglicherweise zuerst warten, bis die Tasten freigegeben werden, indem SieSchlüsselWarten.

Antwort2

Verwenden Sie den Eingabebefehl.

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

bearbeiten

Du sagtest:

In meinem AutoHotKey-Skript möchte ich die Benutzereingabe einfrieren, d. h. alle Eingaben des Benutzers werden nicht an das aktive Programm weitergegeben. Anschließend möchte ich die Eingabe wieder aufheben und alle vom Benutzer eingegebenen Eingaben an das Programm weitergeben.

Mit anderen Worten: Ich friere ein, dann gibt der Benutzer „xyz“ ein, aber dies wird nicht an das aktive Programm weitergegeben, und dann taue ich auf, die Tastenanschläge „xyz“ werden an das Programm weitergegeben, und dann ist alles wieder normal und der Benutzer kann erneut tippen, und es wird an das aktive Programm weitergeleitet.

Der Eingabebefehl führt Folgendes aus:

; Warten Sie, bis der Benutzer eine beliebige Taste drückt. Tasten, die kein sichtbares Zeichen erzeugen, wie etwa Sondertasten, Funktionstasten und Pfeiltasten, werden als Endtasten aufgeführt, damit sie ebenfalls erkannt werden.

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}

Sie können dies für mehrere Schlüssel in einer Schleife durchführen, oder es wird eine Schlüsselfolge als Argument verwendet.

verwandte Informationen