KeyWait

Wartet, bis eine Tastatur-, Maus- oder Joystick-Taste 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, darunter auch Maus- und Joystick-Tasten. Abgesehen von den Joystick-Tasten werden andere Joystick-Attribute nicht unterstützt.

Ein eindeutiger virtueller Tastencode wie vkFF kann auch angegeben werden. 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

Wenn dieser Parameter leer ist, wird der Befehl solange warten, bis der Benutzer die angegebene Tastatur-, Maus- oder Joystick-Taste physisch loslässt. Bei nicht installiertem Tastatur-Hook ist das künstliche Loslassen von TasteName (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). 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 Zustand erreicht hat, und nicht erst, wenn das Zeitlimit abgelaufen ist. In diesem Fall wird ErrorLevel sofort auf 0 gesetzt und die Ausführung des Skripts 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, ansonsten auf 0.

Bemerkungen

Der physische Zustand einer Tastatur- oder Maustaste ist in der Regel derselbe wie der logische Zustand, 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 überprüfen, ob Ihr Skript die Hooks benutzt. Durch Hinzufügen von #InstallKeybdHook und/oder #InstallMouseHook können die Hooks im Skript erzwungen werden.

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

Wenn Sie auf das Loslassen von zwei oder mehr Tasten warten wollen, können Sie KeyWait mehrmals nutzen. Zum Beispiel:

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

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

Siehe auch

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

Beispiele

#1: Grundlegende Verwendung

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.

#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

#3: Neubelegung einer Tastatur- und Maustaste (dient nur zur Veranschaulichung, weil das interne 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

#4: Erkennt, ob eine Taste zweimal gedrückt wurde (ähnlich wie ein Doppelklick). Mit KeyWait wird die Autowiederholungsfunktion der Tastatur 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: Es gibt ein ausführlicheres Skript zur Unterscheidung zwischen einfachem, doppeltem und dreifachem Drücken im unteren Bereich der SetTimer-Seite.

~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