GetKeyState() / GetKeyState

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

GetKeyState()

TasteIstUnten := GetKeyState(Tastenname , Modus)

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. 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. Wenn aber Tastatur- und/oder Maus-Hooks installiert sind, gibt der ermittelte Status genau an, 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 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.

T: Ermittelt den Umschaltstatus (nur für umschaltbare Tasten wie Feststell, Num, Rollen und Einfg gültig). 1 (True) bedeutet, dass die Taste "An" ist, und 0 (False) bedeutet, dass sie "Aus" ist.

Rückgabewert

Diese Funktion gibt 1 zurück, wenn die Taste unten oder eingeschaltet ist, oder 0, wenn sie oben oder ausgeschaltet ist. Für die speziellen Tasten des Joysticks wie Achsen und POV-Schalter werden andere Werte abgerufen.

Wenn Tastenname ungültig ist oder der Status der Taste nicht ermittelt werden konnte, wird eine leere Zeichenkette zurückgegeben.

GetKeyState

Veraltet: Dieser Befehl ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen die GetKeyState-Funktion.

GetKeyState, AusgabeVar, Tastenname , Modus

Parameter

AusgabeVar

Name einer Variable, in der der Status der Taste gespeichert werden soll, was entweder D für Unten (Down) oder U für Oben (Up) ist. Die Variable wird leer sein, wenn der Status der Taste nicht ermittelt werden konnte. Für die speziellen Tasten des Joysticks wie Achsen und POV-Schalter werden andere Werte abgerufen.

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: Dieser Befehl 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. Wenn aber Tastatur- und/oder Maus-Hooks installiert sind, gibt der ermittelte Status genau an, 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 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.

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.

Spezielle Tasten des Joysticks

Wenn Tastenname eine Joystick-Achse wie JoyX ist, wird eine Gleitkommazahl zwischen 0 und 100 zurückgegeben, die die Position des Joysticks als Prozentwert des Bewegungsbereichs dieser Achse repräsentiert. Das Format der Zahl kann via SetFormat geändert werden. Mit dem Test-Skript können Sie Ihr(e) Joystick(s) analysieren.

Wenn Tastenname JoyPOV ist, wird ein Wert zwischen 0 und 35900 zurückgegeben. Die folgenden ungefähren POV-Werte werden von den meisten Joysticks verwendet:

Bemerkungen

KeyWait ist kürzer und einfacher als eine GetKeyState-Schleife, wenn es darum geht, auf eine Tastenzustandsänderung zu warten.

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 finden Sie in Joystick-Neubelegung und Joystick-Zu-Maus-Skript.

Siehe auch

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

Beispiele

Beispiel #1: Befehl vs. Funktion

Obwohl der erste Codeblock den Befehl und der zweite die Funktion verwendet, sind diese beiden Blöcke funktional identisch:

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.
Status := GetKeyState("RButton")  ; Rechte Maustaste.
Status := GetKeyState("Joy2")  ; Die zweite Taste des ersten Joysticks.

if GetKeyState("Shift")
    MsgBox Mindestens eine UMSCHALT-Taste ist unten.
else
    MsgBox Keine UMSCHALT-Taste unten.

Status := GetKeyState("CapsLock", "T") ; True, wenn FESTSTELL-Taste AN ist, ansonsten False.

Beispiel #2: Neubelegung

(Dieses Beispiel dient nur zur Veranschaulichung, da es einfacher wäre, auf das interne Neubelegungs-Feature zurückzugreifen.) Im folgenden Hotkey wird die Maustaste gedrückt gehalten, während NumpadAdd unten ist, was NumpadAdd effektiv zu einer Maustaste macht. Diese Methode kann auch genutzt werden, um eine Aktion zu wiederholen, 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
    if !GetKeyState("NumpadAdd", "P")  ; Die Taste wurde losgelassen, also Schleife verlassen.
        break
    ; ... fügen Sie hier beliebig andere Aktionen ein, die wiederholt werden sollen.
}
MouseClick, left,,, 1, 0, U  ; Lässt die Maustaste los.
return

Beispiel #3

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

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

Weitere Beispiele

Weitere Beispiele finden Sie unter Joystick-Neubelegung und Joystick-Zu-Maus-Skript.