KeyWait

Wartet, bis eine Tastatur-, Maus- oder Controllertaste losgelassen oder nach unten gedrückt wird.

KeyWait, TasteName , Optionen

Parameter

TasteName

Nahezu jedes Zeichen, das mit der Tastatur erzeugt werden kann, oder einer der Tastennamen aus der Tastenliste, einschließlich Maus- und Controllertasten. Andere Controllerwerte werden nicht unterstützt.

Es kann auch explizit ein eindeutiger virtueller Tastencode wie vkFF angegeben werden. Dies ist nützlich für den seltenen Fall, dass eine Taste keinen Namen hat und beim Drücken kein sichtbares Zeichen erzeugt. Schauen Sie sich die Anleitung am Ende der Tastenliste an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.

Optionen

Wenn leer oder weggelassen, wird der Befehl solange warten, bis der Benutzer die angegebene Tastatur-, Maus- oder Controllertaste physisch loslässt. Wenn aber der Tastatur-Hook nicht installiert ist und TasteName eine Tastaturtaste ist, die künstlich losgelassen wurde (z.B. via Send-Befehl), wird die Taste so behandelt, als wäre sie physisch losgelassen worden. Dasselbe gilt für Maustasten, wenn der Maus-Hook nicht installiert ist.

Andernfalls geben Sie eine Zeichenkette an, die aus einer oder mehreren der folgenden Optionen besteht (in beliebiger Reihenfolge, optional durch Leerzeichen getrennt):

D: Warten, bis die Taste nach unten gedrückt wird.

L: Prüft den logischen Status der Taste; das ist der Status, den das Betriebssystem und das aktive Fenster für diese Taste vermuten, der aber nicht unbedingt dem physischen Status entspricht. Diese Option wird bei Controllertasten ignoriert.

T: Zeitlimit (z.B. T3). Die zu wartenden Sekunden, bevor eine Zeitüberschreitung erfolgt und ErrorLevel auf 1 gesetzt wird. Der Befehl hört bereits auf zu warten, wenn die Taste den angegebenen Status erreicht hat, und nicht erst, wenn das Zeitlimit abgelaufen ist. In diesem Fall wird ErrorLevel sofort auf 0 gesetzt und die Skriptausführung fortgesetzt.

Der Zeitlimit-Wert kann eine Floating-Point-Zahl wie 2.5 sein, aber kein Hexadezimalwert wie 0x03.

ErrorLevel

ErrorLevel wird auf 1 gesetzt, wenn der Befehl das Zeitlimit überschritten hat, andernfalls auf 0.

Bemerkungen

Der physische Status einer Tastatur- oder Maustaste ist in der Regel derselbe wie der logische Status, es sei denn, der Tastatur- und/oder Maus-Hook ist installiert, dann spiegelt dieser genau wider, ob der Benutzer die Taste physisch gedrückt hält oder nicht. Mit dem KeyHistory-Befehl oder -Menüpunkt können Sie prüfen, ob Ihr Skript die Hooks verwendet. Um die Installation eines Hooks zu erzwingen, fügen Sie die #InstallKeybdHook- und/oder #InstallMouseHook-Direktive in das Skript ein.

Während der Befehl wartet, können neue Threads via Hotkeys, benutzerdefinierte Menüpunkte oder Timer gestartet werden.

Um auf das Loslassen von zwei oder mehr Tasten zu warten, verwenden Sie KeyWait mehrmals. Zum Beispiel:

KeyWait Control  ; Warten, bis STRG und ALT losgelassen werden.
KeyWait Alt

Um auf das Drücken einer beliebigen Taste aus einer Liste von Tasten zu warten, siehe Input-Beispiel #1.

GetKeyState, Tastenliste, Input, KeyHistory, #InstallKeybdHook, #InstallMouseHook, ClipWait, WinWait

Beispiele

Wartet, bis die A-Taste losgelassen wird.

KeyWait, a

Wartet, bis die linke Maustaste nach unten gedrückt wird.

KeyWait, LButton, D

Wartet bis zu 3 Sekunden, bis die erste Controllertaste nach unten gedrückt wird.

KeyWait, Joy1, D T3

Wartet, bis die linke ALT-Taste logisch losgelassen wird.

KeyWait, LAlt, L

Wenn dieser Hotkey gedrückt wird, wartet KeyWait, bis die Feststelltaste physisch losgelassen wird. Dies hat zur Folge, dass nachfolgende Anweisungen beim Loslassen statt Drücken ausgeführt werden. Dieses Verhalten ähnelt ~CapsLock up::.

~CapsLock::
KeyWait, CapsLock  ; Wartet auf das physische Loslassen.
MsgBox Sie haben die FESTSTELL-Taste gedrückt und losgelassen.
return

Belegt eine Tastatur- oder Maustaste neu. (Dieses Beispiel dient nur zur Illustration, da es einfacher wäre, die interne Neubelegung zu verwenden.) Im folgenden Hotkey wird die Maustaste gedrückt gehalten, während NumpadAdd unten ist, was NumpadAdd effektiv zu einer Maustaste macht.

*NumpadAdd::
MouseClick, left,,, 1, 0, D  ; Die linke Maustaste gedrückt halten.
KeyWait, NumpadAdd  ; Wartet, bis die Taste losgelassen wird.
MouseClick, left,,, 1, 0, U  ; Die Maustaste loslassen.
return

Erkennt, ob eine Taste zweimal gedrückt wurde (ähnlich einem Doppelklick). KeyWait verhindert, dass die Autowiederholungsfunktion der Tastatur einen ungewollten Doppeldruck erzeugt, wenn die rechte STRG-Taste zum Modifizieren einer anderen Taste gedrückt gehalten wird. Hierzu wird der Thread des Hotkeys am Laufen gehalten, wodurch die Autowiederholung blockiert wird, solange #MaxThreadsPerHotkey standardmäßig 1 ist. Für ein ausführlicheres Skript, das zwischen einfachem, doppeltem und dreifachem Tastendruck unterscheidet, siehe SetTimer-Beispiel #3.

~RControl::
if (A_PriorHotkey != "~RControl" or A_TimeSincePriorHotkey > 400)
{
    ; Zu viel Zeit zwischen den Instanzen, also kein Doppeldruck.
    KeyWait, RControl
    return
}
MsgBox Sie haben die rechte STRG-Taste doppelt gedrückt.
return