KeyWait

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

KeyWait, Tastenname [, Optionen]

Parameter

Tastenname

Dieser Parameter kann so ziemlich jedes Zeichen von der Tastatur oder ein Tastenname aus der Tastenliste sein, darunter auch Maus- und Joystick-Tasten. Abgesehen von den Joystick-Tasten werden andere Joystick-Attribute nicht unterstützt.

Ein eindeutiger virtueller Tastencode wie vkFF könnte man auch angeben. Diese Angabe ist in Ausnahmefällen nützlich, wo eine Taste keinen Namen hat und keine sichtbaren Zeichen beim Drücken erzeugt. Der virtuelle Tastencode einer solchen Taste kann durch Befolgen der Schritte am unteren Ende der Tastenliste ermittelt werden.

Optionen

Fehlt dieser Parameter oder ist er leer, wird der Befehl unendlich lang auf die angegebene Tastatur-, Maus- oder Joystick-Taste warten, bis sie physisch vom Benutzer losgelassen wird. Bei nicht installiertem Tastatur-Hook ist das künstliche Loslassen von Tastenname (z. B. via Send-Befehl) das gleiche wie, als hätte man sie physisch losgelassen. Bei nicht installiertem Maus-Hook gilt das gleiche wie oben, aber in Bezug auf Maustasten.

Optionen: Eine Zeichenkette mit einen oder mehreren der folgenden Buchstaben (in beliebiger Reihenfolge, optional durch Leerzeichen getrennt):

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

L: Überprüft den logischen Status der Taste; dieser Status macht dem Betriebssystem und aktivem Fenster glauben, dass die Taste gedrückt wurde, welches aber nicht unbedingt dem physischen Status entspricht. Diese Option wird bei Joystick-Tasten ignoriert.

T: Zeitlimit (z. B. T3). Wieviele Sekunden gewartet werden sollen, bevor eine Zeitüberschreitung erfolgt und ErrorLevel auf 1 gesetzt wird. Erreicht die Taste den angegebenen Zustand, bevor das Zeitlimit abläuft, wird ErrorLevel sofort auf 0 gesetzt und das Skript weiter ausgeführt.

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

ErrorLevel

ErrorLevel wird auf 1 gesetzt, wenn der Befehl die Zeit überschritten hat, ansonsten auf 0.

Bemerkungen

Der physische Zustand einer Taste oder Maustaste wird in der Regel dasselbe sein wie der logische Zustand, sofern keine Tastatur- und/oder Maus-Hooks installiert sein. Ist das aber der Fall, kann ein Hook genau wiedergegeben, ob der Benutzer eine Taste physisch gedrückt hält oder nicht. Mit dem KeyHistory-Befehl oder -Menüpunkt kannst du überprüfen, ob dein Skript die Hooks benutzt. Durch Hinzufügen von #InstallKeybdHook und/oder #InstallMouseHook können die Hooks im Skript erzwungen werden.

Während der Befehl in einem Wartezustand ist, können neue Threads via Hotkey, benutzerdefinierte Menüeinträge oder Timer gestartet werden.

Verwende mehrmals KeyWait, wenn du auf das Loslassen von zwei oder mehr Tasten warten willst. Zum Beispiel:

KeyWait Control  ; Wartet darauf, dass sowohl STRG als auch ALT losgelassen wird.
KeyWait Alt

Im Beispiel-Abschnitt von Input wird gezeigt, wie auf das Drücken einer Taste, die zu einer bestimmten Reihe von Tasten gehört, gewartet werden kann.

Siehe auch

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

Beispiele

; Beispiel #1: Grundlagen:
KeyWait, a  ; Warten, bis die A-Taste losgelassen wird.
KeyWait, LButton, D  ; Wartet, bis die linke Maustaste gedrückt wird.
KeyWait, Joy1, D T3  ; Wartet bis zu 3 Sekunden, bis die erste Joystick-Taste gedrückt wird.
KeyWait, LAlt, L  ; Wartet, bis die linke ALT-Taste logisch losgelassen wird.

 

; Beispiel #2: Ein einfacher Hotkey:
~Capslock::
KeyWait, Capslock  ; Wartet, bis der Benutzer diese Taste physisch losgelassen hat.
MsgBox Sie haben die FESTSTELL-Taste gedrückt und losgelassen.
return

 

; Beispiel #3: Neubelegung einer Tastatur- und Maustaste (dient nur zur Veranschaulichung,
; weil das Built-in-Neubelegungs-Feature leichter zu handhaben wäre):
; Die linke Maustaste wird gedrückt gehalten, während NumpadAdd unten ist, das effektiv
; NumpadAdd in die linke Maustaste transformiert.
*NumpadAdd::
MouseClick, left,,, 1, 0, D  ; Hält die linke Maustaste gedrückt.
KeyWait, NumpadAdd  ; Wartet, bis die Taste losgelassen wird.
MouseClick, left,,, 1, 0, U  ; Lässt die Maustaste los.
return

 

; Beispiel #4: Erkennt, ob eine Taste zweimal gedrückt wurde (ähnlich wie ein Doppelklick).
; Mit KeyWait wird das Auto-Wiederholungs-Feature daran gehindert, einen ungewollten Doppeldruck
; zu erzeugen, wenn man die rechte STRG-Taste zum Modifizieren einer anderen Taste gedrückt hält.  Es lässt den
; Thread des Hotkeys laufen, wodurch die Autowiederholung blockiert wird, solange
; #MaxThreadsPerHotkey auf den Standardwert 1 ist.
; Hinweis: Auf der SetTimer-Seite ganz unten gibt es ein ausführlicheres Skript, um zwischen einfaches, doppeltes und dreifaches Drücken zu unterscheiden.
~RControl::
if (A_PriorHotkey <> "~RControl" or A_TimeSincePriorHotkey > 400)
{
    ; Zu viel Zeit zwischen den Instanzen, daher kein doppeltes Drücken.
    KeyWait, RControl
    return
}
MsgBox Sie haben die rechte STRG-Taste doppelt gedrückt.
return