GetKeyState

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

GetKeyState()

TasteIstUnten := GetKeyState(Tastenname , Modus)

Parameter

Tastenname

Nahezu jedes Zeichen, das mit der Tastatur erzeugt werden kann, oder einer der Tastennamen aus der Tastenliste, 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. Virtuelle Tastencodes sind nützlich, um auf Tasten zu verweisen, die keine Namen haben (was aber selten vorkommt). Schauen Sie sich die Instruktion am unteren Ende der Tastenliste an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.

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 ignoriert, wenn der Status des Joysticks abgerufen wird.

Lässt man diesen Parameter weg, wird standardmäßig der logische Zustand der Taste ermittelt. Das ist der Zustand, den das Betriebssystem oder aktive Fenster für diese Taste vermutet, aber nicht unbedingt dem physischen Zustand entsprechen muss.

Ansonsten können Sie einen der folgenden Buchstaben angeben:

P: Ruft den physischen Zustand ab (z. B. ob der Benutzer eine Taste physisch gedrückt hält). 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 (vorausgesetzt, dass sie während der Ausführung des Skripts gedrückt gehalten wurde). Mit dem KeyHistory-Befehl oder -Menüpunkt können Sie überprüfen, ob Ihr Skript ein Hook benutzt. Fügen Sie die Direktiven #InstallKeybdHook und/oder #InstallMouseHook in Ihr Skript ein, um die Installation eines Hooks zu erzwingen.

T: Ruft den Umschaltzustand ab. Bei Tasten außer Feststell, Num und Rollen ist der Umschaltzustand grundsätzlich 0, wenn das Skript gestartet wird, und wird nicht zwischen Prozessen synchronisiert.

Rückgabewert

Diese Funktion gibt 1 zurück, wenn die Taste unten ist (oder eingeschaltet ist), oder 0, wenn sie oben ist (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 Zustand 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 Zustand der Taste gespeichert werden soll, was entweder D für Unten (Down) oder U für Oben (Up) ist. Die Variable wird leer gemacht, wenn der Zustand der Taste nicht ermittelt werden konnte. Für die speziellen Tasten des Joysticks wie Achsen und POV-Schalter werden andere Werte abgerufen.

Tastenname

Nahezu jedes Zeichen, das mit der Tastatur erzeugt werden kann, oder einer der Tastennamen aus der Tastenliste, 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. Virtuelle Tastencodes sind nützlich, um auf Tasten zu verweisen, die keine Namen haben (was aber selten vorkommt). Schauen Sie sich die Instruktion am unteren Ende der Tastenliste an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.

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 ignoriert, wenn der Status des Joysticks abgerufen wird.

Lässt man diesen Parameter weg, wird standardmäßig der logische Zustand der Taste ermittelt. Das ist der Zustand, den das Betriebssystem oder aktive Fenster für diese Taste vermutet, aber nicht unbedingt dem physischen Zustand entsprechen muss.

Ansonsten können Sie einen der folgenden Buchstaben angeben:

P: Ruft den physischen Zustand ab (z. B. ob der Benutzer eine Taste physisch gedrückt hält). 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 (vorausgesetzt, dass sie während der Ausführung des Skripts gedrückt gehalten wurde). Mit dem KeyHistory-Befehl oder -Menüpunkt können Sie überprüfen, ob Ihr Skript ein Hook benutzt. Fügen Sie die Direktiven #InstallKeybdHook und/oder #InstallMouseHook in Ihr Skript ein, um die Installation eines Hooks zu erzwingen.

T: Ruft den Umschaltzustand ab. D bedeutet, dass die Taste "An" ist, und U bedeutet, dass sie "Aus" ist. Bei Tasten außer Feststell, Num und Rollen ist der Umschaltzustand grundsätzlich U, wenn das Skript gestartet wird, und wird nicht zwischen Prozessen synchronisiert.

Spezielle Tasten des Joysticks

Wenn Tastenname eine Joystick-Achse wie JoyX ist, wird eine Floating-Point-Zahl 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 einen oder mehrere Joysticks 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

Wenn es darum geht, auf eine Änderung des Tastenzustands zu warten, ist KeyWait besser geeignet als eine GetKeyState-Schleife.

Es kann vorkommen, dass Betriebssysteme mit ungewöhnlichen Tastaturtreibern den Zustand ihrer Tasten, insbesondere der Umschaltzustand von Tasten wie Feststell, nur langsam aktualisieren. Wenn Sie also vorhaben, direkt danach den Zustand von so einer Taste zu überprüfen, wäre es ratsam, ein Sleep davorzusetzen, um dem Betriebssystem genug Zeit zum Aktualisieren des Tastenzustands zu verschaffen.

Beispiele zur Verwendung von GetKeyState mit einem Joystick finden Sie unter Joystick-Neubelegung und Joystick-Zu-Maus-Skript.

Siehe auch

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

Beispiele

#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.

#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

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