GetKeyState

Überprüft, ob eine Taste oben oder unten ist. Kann auch den Joystickstatus abrufen.

GetKeyState, AusgabeVar, Tastenname [, Modus]
TasteIstUnten := GetKeyState("Tastenname" [, "Modus"])

Parameter

AusgabeVar

Name einer Variable, in der der Status der Taste gespeichert werden soll. D für Unten (Down) und U für Oben (Up) (aber die GetKeyState-Funktion übergibt True (1) für Oben und False (0) für Unten). Die Variable wird leer sein, wenn der Status der Taste nicht ermittelt werden konnte.

Die nächsten 2 Methoden gelten nur für Joysticks:

1) Bei einer Joystick-Achse wie JoyX wird AusgabeVar auf eine Gleitkommazahl zwischen 0 und 100 gesetzt, um die Position des Joysticks als Prozentwert vom Bewegungsbereich der Achse darzustellen. Das Format der Zahl kann via SetFormat geändert werden. Mit dem Test-Skript kannst du dein(e) Joystick(s) analysieren.

2) Wenn Tastenname JoyPOV ist, wird der abgerufene Wert zwischen 0 und 35900 sein. Die folgenden ungefähren POV-Werte werden von den meisten Joysticks verwendet:
-1: keinen Winkel erkannt
0: nach vorne gerichtet
9000 (90 Grad): nach rechts gerichtet
27000 (270 Grad): nach links gerichtet
18000 (180 Grad): nach hinten gerichtet

Tastenname

Dieser Parameter kann so ziemlich jedes Zeichen von der Tastatur oder ein Tastenname aus der Tastenliste sein, darunter auch Maus- und Joystick-Tasten. Beispiele: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.

Alternativ kann ein eindeutiger virtueller Tastencode wie vkFF angegeben werden. Diese Alternative ist in Ausnahmefällen nützlich, wo eine Taste keinen Namen hat. Der virtuelle Tastencode einer solchen Taste kann durch Befolgen der Schritte am unteren Ende der Tastenliste ermittelt werden.

Bekannte Einschränkung: Diese Funktion kann nicht zwischen zwei Tasten unterscheiden, die den gleichen virtuellen Tastencode haben, wie z. B. Left und NumpadLeft.

Modus

Dieser Parameter wird beim Abrufen eines Joystick-Status ignoriert.

Fehlt dieser Parameter, wird standardmäßig der logische Tastenstatus ermittelt. Dieser Status macht dem Betriebssystem und aktivem Fenster glauben, dass die Taste gedrückt wurde, welches aber nicht unbedingt dem physischen Status entspricht.

Alternativ kann einer der folgenden Buchstaben angegeben werden:

P: Ermittelt den physischen Status (z. B. ob der Benutzer eine Taste physisch gedrückt hält). Der physische Zustand einer Taste oder Maustaste ist üblicherweise das gleiche wie der logische Zustand, sofern keine Tastatur- und/oder Maus-Hooks installiert sind. Ist dies aber der Fall, kann der Befehl genau wiedergeben, ob der Benutzer eine Taste physisch gedrückt hält oder nicht (solange sie nach unten gedrückt wurde, während das Skript lief). 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.

T: Ermittelt den Umschaltstatus (nur für umschaltbare Tasten wie FESTSTELL, NUM, ROLLEN und EINFG gültig). D bedeutet, dass die Taste "An" ist, und U bedeutet, dass sie "Aus" ist (aber die GetKeyState-Funktion übergibt True (1) für "An" und False (0) für "Aus").

Bemerkungen

Wenn du auf einen neuen Zustand einer Taste warten willst, ist KeyWait besser geeignet als eine GetKeyState-Schleife.

Es kann sein, dass Betriebssysteme mit ungewöhnlichen Tastaturtreibern den Zustand ihrer Tasten nur langsam aktualisieren, besonders der Umschaltstatus von Tasten wie FESTSTELL. Ein Skript, das den Zustand einer solchen Taste überprüft, könnte Sleep davor verwenden, um dem Betriebssystem genug Zeit zum Aktualisieren des Tastenzustands zu verschaffen.

Beispiele zur Verwendung von GetKeyState mit einem Joystick findest du in Joystick-Neubelegung und Joystick-Zu-Maus-Skript.

Siehe auch

KeyWait, Tastenliste, Joystick-Neubelegung, KeyHistory, #InstallKeybdHook, #InstallMouseHook

Beispiele

; Einfache Beispiele:
GetKeyState, Status, RButton  ; Rechte Maustaste.
GetKeyState, Status, Joy2  ; Die zweite Taste des ersten Joysticks.

GetKeyState, Status, Shift
if Status = D
    MsgBox Mindestens eine UMSCHALT-Taste ist unten.
else
    MsgBox Keine UMSCHALT-Taste unten.

GetKeyState, Status, CapsLock, T ;  D, wenn FESTSTELL-Taste AN ist, ansonsten U für AUS.
Status := GetKeyState("Capslock", "T")  ; True, wenn FESTSTELL-Taste AN ist, ansonsten Falsch für AUS.

; Neubelegungsbeispiel (dient nur zur Veranschaulichung,
; weil das Built-in-Neubelegungs-Feature leichter zu handhaben wäre):
; Im folgenden Hotkey wird die Maustaste gedrückt gehalten, während NumpadAdd
; unten ist, das NumpadAdd effektiv in eine Maustaste transformiert). Diese Methode
; kann zum Wiederholen einer Aktion benutzt werden, während der Benutzer eine Taste gedrückt hält:
*NumpadAdd::
MouseClick, left,,, 1, 0, D  ; Hält die linke Maustaste gedrückt.
Loop
{
    Sleep, 10
    GetKeyState, Status, NumpadAdd, P
    if Status = U  ; Die Taste wurde losgelassen, also Schleife verlassen.
        break
    ; ... füge hier beliebig andere Aktionen ein, die wiederholt werden sollen.
}
MouseClick, left,,, 1, 0, U  ; Lässt die Maustaste los.
return

; Beispiel: Macht das Verhalten einer Joystick-Taste abhängig von der Achsenposition des Joysticks.
joy2:: 

GetKeyState, joyx, JoyX
if joyx > 75
    MsgBox Aktion #1 (Taste gedrückt, während Joystick nach rechts bewegt wurde).
else if joyx < 25
    MsgBox Aktion #2 (Taste gedrückt, während Joystick nach links bewegt wurde).
else
    MsgBox Aktion #3 (Taste gedrückt, während Joystick horizontal zentriert wurde).
return

; Siehe Joystick-Neubelegung und Joystick-Zu-Maus-Skript für weitere Beispiele.