<script src="../static/ga4.js" type="text/javascript"></script> </head> <body> <h1>GetKeyState</h1> <p>GetKeyState kann als <a href="#function">Funktion</a> oder <a href="#command">Befehl</a> verwendet werden, wobei Ersteres für neue Skripte empfohlen ist. Beide prüfen, ob eine Tastatur-, Maus- oder Controllertaste oben oder unten ist, und können Controllerwerte abrufen. Der Unterschied ist, dass die Funktion in einem <a href="../Variables.htm#Expressions">Ausdruck</a> verwendet werden kann und 1 (true) für unten oder 0 (false) für oben zurückgibt, während der Befehl D für unten oder U für oben in eine Variable speichert.</p> <h2 id="function">GetKeyState-Funktion</h2> <p>Gibt 1 (true) oder 0 (false) zurück, je nachdem, ob die angegebene Tastatur-, Maus- oder Controllertaste unten oder oben ist. Ruft auch Controllerwerte ab.</p> <pre class="Syntax">TasteIstUnten := <span class="func">GetKeyState</span>(TasteName <span class="optional">, Modus</span>)</pre> <h3 id="Function_Parameters">Parameter</h3> <dl> <dt>TasteName</dt> <dd><p>Nahezu jedes Zeichen, das mit der Tastatur erzeugt werden kann, oder einer der Tastennamen aus der <a href="../KeyList.htm">Tastenliste</a>, einschließlich Maus- und Controllertasten. Beispiele: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.</p> <p>Alternativ kann explizit ein eindeutiger virtueller Tastencode wie vkFF angegeben werden. Tastencodes sind nützlich, um auf Tasten zu verweisen, die keinen Namen haben (selten). Schauen Sie sich die Anleitung am Ende der <a href="../KeyList.htm#SpecialKeys">Tastenliste</a> an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.</p> <p><b>Bekannte Einschränkung:</b> Diese Funktion kann nicht zwischen zwei Tasten unterscheiden, die den gleichen virtuellen Tastencode haben, wie z.B. Left und NumpadLeft.</p></dd> <dt>Modus</dt> <dd><p>Dieser Parameter wird ignoriert, wenn Controllerwerte abgerufen werden.</p> <p>Wenn leer oder weggelassen, wird standardmäßig der logische Status der Taste abgerufen. Dies ist der Status, den das Betriebssystem und das aktive Fenster für diese Taste vermuten, der aber nicht unbedingt dem physischen Status entspricht.</p> <p>Andernfalls geben Sie einen der folgenden Buchstaben an:</p> <p><strong>P:</strong> Ruft den physischen Status ab (d.h. ob der Benutzer eine Taste physisch gedrückt hält). Der physische Status einer Tastatur- oder Maustaste ist in der Regel derselbe wie der logische Status, 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, die Taste wurde während der Skriptausführung nach unten gedrückt). Mit dem <a href="KeyHistory.htm">KeyHistory</a>-Befehl oder -Menüpunkt können Sie prüfen, ob Ihr Skript die Hooks verwendet. Um die Installation eines Hooks zu erzwingen, fügen Sie die Direktiven <a href="_InstallKeybdHook.htm">#InstallKeybdHook</a> und/oder <a href="_InstallMouseHook.htm">#InstallMouseHook</a> in Ihr Skript ein.</p> <p><strong>T:</strong> Ruft den Schaltstatus ab. Bei allen Tasten außer <kbd>Feststell</kbd>, <kbd>Num</kbd> und <kbd>Rollen</kbd> ist der Schaltstatus beim Start des Skripts grundsätzlich immer 0 und wird nicht zwischen Prozessen synchronisiert.</p> </dd> </dl> <h3 id="Function_Return_Value">Rückgabewert</h3> <p>Diese Funktion gibt 1 (true) zurück, wenn die Taste unten ist (oder eingeschaltet ist), oder 0 (false), wenn sie oben ist (oder ausgeschaltet ist). Für spezielle Controllerbedienelemente wie Achsen und POV-Schalter <a href="#controller">werden andere Werte abgerufen</a>.</p> <p>Wenn <em>TasteName</em> ungültig ist oder der Status der Taste nicht ermittelt werden konnte, wird eine leere Zeichenkette zurückgegeben.</p> <h2 id="command">GetKeyState-Befehl</h2> <p>Speichert den Buchstaben D oder U in eine Variable, je nachdem, ob die angegebene Tastatur-, Maus- oder Controllertaste unten oder oben ist. Ruft auch Controllerwerte ab.</p> <p class="warning"><strong>Veraltet:</strong> Dieser Befehl ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen die oben beschriebene <a href="#function">GetKeyState</a>-Funktion.</p> <pre class="Syntax"><span class="func">GetKeyState</span>, AusgabeVar, TasteName <span class="optional">, Modus</span></pre> <h3 id="Command_Parameters">Parameter</h3> <dl> <dt>AusgabeVar</dt> <dd><p>Name der Ausgabevariable, in der der Status der Taste gespeichert werden soll, entweder D für unten (down) oder U für oben (up). Die Variable wird leer gemacht, wenn der Status der Taste nicht ermittelt werden konnte. Für spezielle Controllerbedienelemente wie Achsen und POV-Schalter <a href="#controller">werden andere Werte abgerufen</a>.</p> </dd> <dt>TasteName</dt> <dd><p>Nahezu jedes Zeichen, das mit der Tastatur erzeugt werden kann, oder einer der Tastennamen aus der <a href="../KeyList.htm">Tastenliste</a>, einschließlich Maus- und Controllertasten. Beispiele: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.</p> <p>Alternativ kann explizit ein eindeutiger virtueller Tastencode wie vkFF angegeben werden. Tastencodes sind nützlich, um auf Tasten zu verweisen, die keinen Namen haben (selten). Schauen Sie sich die Anleitung am Ende der <a href="../KeyList.htm#SpecialKeys">Tastenliste</a> an, um zu erfahren, wie der virtuelle Tastencode einer solchen Taste ermittelt werden kann.</p> <p><b>Bekannte Einschränkung:</b> Dieser Befehl kann nicht zwischen zwei Tasten unterscheiden, die den gleichen virtuellen Tastencode haben, wie z.B. Left und NumpadLeft.</p></dd> <dt>Modus</dt> <dd><p>Dieser Parameter wird ignoriert, wenn Controllerwerte abgerufen werden.</p> <p>Wenn leer oder weggelassen, wird standardmäßig der logische Status der Taste abgerufen. Dies ist der Status, den das Betriebssystem und das aktive Fenster für diese Taste vermuten, der aber nicht unbedingt dem physischen Status entspricht.</p> <p>Andernfalls geben Sie einen der folgenden Buchstaben an:</p> <p><strong>P:</strong> Ruft den physischen Status ab (d.h. ob der Benutzer eine Taste physisch gedrückt hält). Der physische Status einer Tastatur- oder Maustaste ist in der Regel derselbe wie der logische Status, 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, die Taste wurde während der Skriptausführung nach unten gedrückt). Mit dem <a href="KeyHistory.htm">KeyHistory</a>-Befehl oder -Menüpunkt können Sie prüfen, ob Ihr Skript die Hooks verwendet. Um die Installation eines Hooks zu erzwingen, fügen Sie die Direktiven <a href="_InstallKeybdHook.htm">#InstallKeybdHook</a> und/oder <a href="_InstallMouseHook.htm">#InstallMouseHook</a> in Ihr Skript ein.</p> <p><strong>T:</strong> Ruft den Schaltstatus ab. D bedeutet, dass die Taste "an" ist, und U bedeutet, dass sie "aus" ist. Bei allen Tasten außer <kbd>Feststell</kbd>, <kbd>Num</kbd> und <kbd>Rollen</kbd> ist der Schaltstatus beim Start des Skripts grundsätzlich immer U und wird nicht zwischen Prozessen synchronisiert.</p> </dd> </dl> <a id="joystick"></a> <h2 id="controller">Spezielle Controllerbedienelemente</h2> <p>Wenn <em>TasteName</em> die Achse eines Sticks wie z.B. JoyX ist, wird eine Floating-Point-Zahl zwischen 0 und 100 zurückgegeben, die die Position des Sticks als Prozentsatz des Bewegungsbereichs dieser Achse repräsentiert. Das Format der Zahl kann via <a href="Format.htm">Format()</a> oder <a href="SetFormat.htm">SetFormat</a> geändert werden. Mit dem <a href="../scripts/index.htm#ControllerTest">Testskript</a> können Sie Ihren Controller analysieren.</p> <p>Wenn <em>TasteName</em> JoyPOV ist, wird ein Wert zwischen 0 und 35900 zurückgegeben. Die folgenden ungefähren POV-Werte werden von den meisten Controllern verwendet:</p> <ul> <li>-1: keinen Winkel erkannt</li> <li>0: nach vorne gerichtet</li> <li>9000 (90 Grad): nach rechts gerichtet</li> <li>27000 (270 Grad): nach links gerichtet</li> <li>18000 (180 Grad): nach hinten gerichtet</li> </ul> <p>Wenn <em>TasteName</em> JoyName, JoyButtons, JoyAxes oder JoyInfo ist, wird der Name, die Anzahl der Tasten, die Anzahl der Achsen bzw. die Fähigkeiten des Controllers abgerufen. Weitere Informationen finden Sie unter <a href="../KeyList.htm#Controller">Gamecontroller</a>.</p> <h2 id="Remarks">Bemerkungen</h2> <p><a href="KeyWait.htm">KeyWait</a> ist besser geeignet als eine GetKeyState-Schleife, wenn es darum geht, auf die Statusänderung einer Tastatur-, Maus- oder Controllertaste zu warten.</p> <p>Es kann vorkommen, dass Betriebssysteme mit ungewöhnlichen Tastaturtreibern den Status von Tasten, insbesondere den Schaltstatus von Tasten wie <kbd>Feststell</kbd>, nur langsam aktualisieren. Wenn Sie also vorhaben, den geänderten Status einer solchen Taste zu prüfen, ist es ratsam, ein <a href="Sleep.htm">Sleep</a> vor der Überprüfung zu setzen, um dem Betriebssystem genügend Zeit zu geben, den Status der Taste zu aktualisieren.</p> <p>Beispiele für die Verwendung von GetKeyState mit einem Controller finden Sie unter <a href="../misc/RemapController.htm">Controllerneubelegung</a> und <a href="../scripts/index.htm#ControllerMouse">Controller-Zu-Maus-Skript</a>.</p> <h2 id="Related">Siehe auch</h2> <p><a href="KeyWait.htm">KeyWait</a>, <a href="../KeyList.htm">Tastenliste</a>, <a href="../misc/RemapController.htm">Controllerneubelegung</a>, <a href="KeyHistory.htm">KeyHistory</a>, <a href="_InstallKeybdHook.htm">#InstallKeybdHook</a>, <a href="_InstallMouseHook.htm">#InstallMouseHook</a></p> <h2 id="Examples">Beispiele</h2> <a id="ExCmdVsFn"></a> <div class="ex" id="ExFnVsCmd"> <p><a class="ex_number" href="#ExFnVsCmd"></a> Funktion vs. Befehl. Obwohl der erste Codeblock die Funktion und der zweite den Befehl verwendet, sind beide Codeblöcke funktionsgleich.</p> <pre>Status := GetKeyState("RButton") <em>; Rechte Maustaste.</em> Status := GetKeyState("Joy2") <em>; Die zweite Taste des ersten Controllers.</em> if GetKeyState("Shift") MsgBox Mindestens eine UMSCHALT-Taste ist unten. else MsgBox Keine UMSCHALT-Taste unten. Status := GetKeyState("CapsLock", "T") <em>; True, wenn FESTSTELL-Taste AN ist, andernfalls False.</em></pre> <pre>GetKeyState, Status, RButton <em>; Rechte Maustaste.</em> GetKeyState, Status, Joy2 <em>; Die zweite Taste des ersten Controllers.</em> GetKeyState, Status, Shift if (Status = "D") MsgBox Mindestens eine UMSCHALT-Taste ist unten. else MsgBox Keine UMSCHALT-Taste unten. GetKeyState, Status, CapsLock, T <em>; D, wenn FESTSTELL-Taste AN ist, andernfalls U.</em></pre> </div> <div class="ex" id="ExRemap"> <p><a class="ex_number" href="#ExRemap"></a> Neubelegung. (Dieses Beispiel dient nur zur Illustration, da es einfacher wäre, die <a href="../misc/Remap.htm">interne Neubelegung</a> zu verwenden.) 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 verwendet werden, um eine Aktion zu wiederholen, während der Benutzer eine Taste gedrückt hält.</p> <pre>*NumpadAdd:: MouseClick, left,,, 1, 0, D <em>; Die linke Maustaste gedrückt halten.</em> Loop { Sleep, 10 if !GetKeyState("NumpadAdd", "P") <em>; Die Taste wurde losgelassen, also Schleife verlassen.</em> break <em>; ... fügen Sie hier beliebig andere Aktionen ein, die wiederholt werden sollen.</em> } MouseClick, left,,, 1, 0, U <em>; Die Maustaste loslassen.</em> return</pre> </div> <a id="ExJoystick"></a> <div class="ex" id="ExController"> <p><a class="ex_number" href="#ExController"></a> Macht das Verhalten einer Controllertaste abhängig von der Achsenposition des Sticks.</p> <pre>joy2:: JoyX := GetKeyState("JoyX") if (JoyX &gt; 75) MsgBox Aktion #1 (Taste gedrückt, während Stick nach rechts gedrückt wurde). else if (JoyX &lt; 25) MsgBox Aktion #2 (Taste gedrückt, während Stick nach links gedrückt wurde). else MsgBox Aktion #3 (Taste gedrückt, während Stick horizontal zentriert wurde). return </pre> </div> <p>Weitere Beispiele finden Sie unter <a href="../misc/RemapController.htm">Controllerneubelegung</a> und <a href="../scripts/index.htm#ControllerMouse">Controller-Zu-Maus-Skript</a>.</p> </body> </html>