Erstellt, ändert, aktiviert, oder deaktiviert ein Tastenkürzel während das Skript läuft.
Hotkey, TastenName, Label/Sprungmarke, Optionen
Hotkey, IfWinActive/Exist [, Fenstertitel, Fenstertext]
| TastenName |
Name des Tastenkürzels inklusive aller Modifier-Zeichen. Zum Beispiel: #c für den Win+C Hotkey. Wenn TastenName bereits als Tastenkürzel existiert, dann wird dieser abhängig von den anderen Parametern aktualisiert. TastenName kann auch der Name eines existierenden Kürzel-Labels sein (z.B. #c::), was dazu führt, dass dieses mit den entsprechenden Parametern aktualisiert wird. Wenn ein existierendes Kürzel angegeben wird ist TastenName nicht Case-Sensitive (Anm.: abhängig von Groß-/Kleinschreibung). Außerdem spielt die Reihenfolge der Modifier-Zeichen wie ^!+# keine Rolle (erst ab Version 1.0.42). Zum Beispiel ist ^!c hier das Selbe wie !^c. Die aktuelle IfWin-Einstellung gibt an mit welcher Variante des Tastenkürzels gearbeitet wird. Existiert sie noch nicht wird sie angelegt. Wenn ein neues Tastenkürzel angelegt wird -- entweder über den Hotkey-Befehl oder über das Doppel-Doppelzeichen-Label im Skript -- wird die Reihenfolge der Tasten zum festen Namen des Hotkeys, wie er mit A_ThisHotkey angezeigt wird. Dieser Name ändert sich auch nicht, wenn mit einer anderen Abfolge darauf zugegriffen wird (siehe oben). |
| Label/Sprungmarke |
Der Name der Sprungmarke, dessen Inhalt als neuer Thread ausgeführt wird wenn das Tastenkürzel gedrückt wird. Sowohl normale Labels, als auch Hotkey/Hotstring-Marken können verwendet werden. Die nachfolgenden Doppelpunkte sind nicht anzuhängen. Bei dynamischen Labels (z.B. %VarMitLabelName%) ist IsLabel(VarMitLabelName) zuvor aufzurufen um zu überprüfen ob die Sprungmarke auch existiert. Dieser Parameter kann auch leer gelassen werden, wenn TastenName bereits existiert. In diesem Falle wird dessen Ziel nicht geändert. Dies wird verwendet, wenn nur die Optionen angepasst werden sollen. Wenn ein Label angegeben wird, aber das Tastenkürzel zuvor deaktiviert wurde ist er auch anschließend weiterhin deaktiviert. Um dies zu verhindern ist das Wort ON in den Optionen zu verwenden. Dieser Parameter kann auch einer der folgenden Werte sein: On: Das Tastenkürzel wird aktiviert. Ist es bereits aktiviert passiert nichts weiter. Off: Das Tastenkürzel wird deaktiviert. Ist es bereits deaktiviert passiert nichts weiter. Toggle: Das Tastenkürzel wird in den gegenteiligen Zustand versetzt (aktiviert oder deaktiviert). AltTab (und andere): Diese speziellen Alt-Tab-Kürzel sind hier beschrieben. Hinweis: Die aktuelle IfWin-Einstellung gibt an auf welche Variante des Tastenkürzels On/Off/Toggle angewendet wird. |
| Optionen |
Ein String aus 0 oder mehr der folgenden Zeichen mit optionalen Leerzeichen zur optischen Trennung. Zum Beispiel: UseErrorLevel B0 UseErrorLevel [v1.0.42+]: Wenn während der Ausführung des Befehls ein Problem auftritt wird keine Warnung ausgegeben. Stattdessen wird das ErrorLevel auf einen der Fehlercodes gesetzt, die der Tabelle unten entnommen werden können, anschließend wird der aktuelle Thread fortgesetzt. On: Das Tastenkürzel wird aktiviert. Ist es bereits aktiviert passiert nichts weiter. Off [v1.0.42.02+]: Das Tastenkürzel wird deaktiviert. Ist es bereits deaktiviert passiert nichts weiter. Dies wird üblicherweise eingesetzt um ein Tastenkürzel zu erstellen das initial deaktiviert ist. B oder B0: Gib den Buchstaben B an um das Tastenkürzel zu Puffern wie in #MaxThreadsBuffer beschrieben. Verwende B0 (B mit der Nummer 0) um diese Art der Pufferung wieder zu deaktivieren. Pn: Gib den Buchstaben P an, gefolgt von der Thread-Priorität des Hotkeys. When diese Option nicht verwendet wird wird stattdessen 0 eingestellt. Tn: Verwende den Buchstaben T, gefolgt von der maximalen Anzahl der Threads für dieses Kürzel, wie in #MaxThreadsPerHotkey beschrieben wird. Zum Beispiel: T5 Wenn B und/oder T nicht verwendet wird und das Tastenkürzel bereits existiert verändert sich an diesen Einstellungen nichts. Wenn er im Zuge des Befehls angelegt wird werden die aktuellsten Default-Werte herangezogen. Zum Beispiel wird der letzte Aufruf (am Weitesten am Ende des Scripts) von #MaxThreadsBuffer verwendet. Wird #MaxThreadsBuffer im Skript nicht verwendet wird die Default-Einstellung (OFF) verwendet. Das selbe Verhalten findet man auch bei #IfWin: Das letzte Auftreten der Direktive wird für alle neuen Hotkeys verwendet, außer "Hotkey IfWin" wurde bereits durchlaufen. Hinweis: Die aktuelle IfWin-Einstellung gibt an mit welcher Variante des Tastenkürzels gearbeitet wird. Existiert sie noch nicht wird sie angelegt. |
| IfWinActive IfWinExist [v1.0.42+] |
(IfWinNotActive und IfWinNotExist werden ebenfalls unterstützt). Diese Unter-Befehle machen alle später angelegten Tastenkürzel Kontext-Abhängig. Siehe unten für Details. |
| Fenstertitel Fenstertext |
Innerhalb dieser Parameter wird jede Variablen-Referenz wie %var% dauerhaft sobald die Abarbeitung des Kommandos beendet wurde. In andern Worten, spätere Änderungen der Variable haben keinen Einfluss auf bestehende IfWin-Tastenkürzel. Wie #IfWinActive/Exist nutzen FensterTitel und Fenstertext die Standardeinstellungen für SetTitleMatchMode und DetectHiddenWindows, wie sie in der Auto-Execute Section definiert wurden. Siehe #IfWinActive/Exist für Details. |
ErrorLevel wird nur gesetzt, wenn: 1) der erste Parameter IfWin[Not]Active/Exist ist, in welchem Falle er auf 1 gesetzt wird wenn ein Problem auftritt, bzw. 0 andernfalls; oder 2) das Wort UseErrorLevel im Optionen-Parameter verwendet wurde.
| Fehler | Beschreibung |
| 1 | Der Label-Parameter gibt eine nicht existierende Sprungmarke an. |
| 2 | TastenName gibt ein oder mehrere Tasten an, die am aktuellen Tastaturlayout nicht unterstützt werden (auch abhängig von der gewählten Sprache). |
| 3 | Nicht unterstützte Prefix-Taste. Zum Beispiel wird das Mausrad als Prefix nicht unterstützt, wie WheelDown & Enter. |
| 4 | TastenName ist nicht dafür ausgelegt AltTab oder ShiftAltTab-Aktionen zu unterstützen. Es wird dafür immer eine Kombination aus 2 Tasten benötigt, wie RControl & RShift::AltTab |
| 5 | Der Befehl versucht ein nicht existierendes Tastenkürzel zu ändern. |
| 6 | Der Befehl versucht eine nicht existierende Variante eines existierenden Tastenkürzels zu ändern. Um dies zu beheben verwende "Hotkey IfWin" um dieses Kriterium anzugleichen. |
| 50 | Windows 95/98/Me: Der Befehl wurde erfolgreich abgeschlossen, allerdings hat das Betriebssystem die Aktivierung des Tastenkürzels verweigert. Dies tritt üblicherweise auf, wenn diese Tastenkombination bereits durch ein Programm oder das Betriebssystem selbst in Verwendung ist. Unter XP (und neuer) wird diese Zurückweisung mittels Keyboard-Hook überschrieben. |
| 51 | Windows 95/98/Me: Der Befehl wurde erfolgreich abgeschlossen, aber das Tastenkürzel wird nicht unterstützt. Zum Beispiel Maus-Kürzel oder Prefix-Hotkeys wie "a & b" werden nicht unterstützt. |
| 98 | Mit diesem Hotkey würde das Limit von 700-Tastenkürzel-pro-Skript überschritten (jedoch kann jeder Hotkey eine beliebige Anzahl an Varianten haben; Es gibt kein Limit für Hotstrings). |
| 99 | Kein Speicher verfügbar. Dieser Fehler ist sehr selten und tritt üblicherweise nur auf, wenn das Betriebssystem instabil wird. |
Tipp: Die Option UseErrorLevel kann benutzt werden um die Existenz
eines Tastenkürzels zu überprüfen. Zum Beispiel:
Hotkey, ^!p,, UseErrorLevel
if ErrorLevel in 5,6
MsgBox Dieses Kürzel existiert nicht oder hat keine Variante mit dem aktuellen IfWin-Kriterium.
If the goal is to disable selected hotkeys or hotstrings automatically based on the type of window that is active, Hotkey, ^!c, Off is usually less convenient than using #IfWinActive/Exist (or their dynamic counterparts "Hotkey IfWinActive/Exist" below).
Creating hotkeys via double-colon labels performs better than using the Hotkey command because the hotkeys can all be enabled as a batch when the script starts (rather than one by one). Therefore, it is best to use this command to create only those hotkeys whose key names are not known until after the script has started running. One such case is when a script's hotkeys for various actions are configurable via an INI file.
A given label can be the target of more than one hotkey. If it is known that a label was called by a hotkey, you can determine which hotkey by checking the built-in variable A_ThisHotkey.
If the script is suspended, newly added/enabled hotkeys will also be suspended until the suspension is turned off (unless they are exempt as described in the Suspend section).
The keyboard and/or mouse hooks will be installed or removed if justified by the changes made by this command.
Although the Hotkey command cannot directly enable or disable hotkeys in scripts other than its own, in most cases it can override them by creating or enabling the same hotkeys. Whether this works depends on a combination of factors: 1) Whether the hotkey to be overridden is a hook hotkey in the other script (non-hook hotkeys can always be overridden except on Win9x); 2) The fact that the most recently started script's hotkeys generally take precedence over those in other scripts (therefore, if the script intending to override was started most recently, its override should always succeed); 3) Whether the enabling or creating of this hotkey will newly activate the keyboard or mouse hook (if so, the override will always succeed).
Once a script has at least one hotkey, it becomes persistent, meaning that ExitApp rather than Exit should be used to terminate it. Hotkey scripts are also automatically #SingleInstance unless #SingleInstance Off has been specified.
In v1.0.42+, the "Hotkey IfWin" commands allow context-sensitive hotkeys to be created and modified while the script is running (by contrast, the #IfWinActive/Exist directives are positional and take effect before the script begins executing). For example:
Hotkey, IfWinActive, ahk_class Notepad
Hotkey, ^!e, MyLabel ; Creates a hotkey that works only in Notepad.
Using "Hotkey IfWin" puts context sensitivity into effect for all subsequently created or modified hotkeys. In addition, each IfWin sub-command is mutually exclusive; that is, only the most recent one will be in effect.
To turn off context sensitivity (that is, to make subsequently-created hotkeys work in all windows), specify any IfWin sub-command but omit the WinTitle/Text parameters. For example: Hotkey, IfWinActive
If "Hotkey IfWin" is never used by a script, the bottommost use of the #IfWin directive (if any) will be in effect for the Hotkey command.
When a mouse or keyboard hotkey is disabled via IfWin, it performs its native function; that is, it passes through to the active window as though there is no such hotkey. There are two exceptions: 1) Windows 95/98/Me: pressing an IfWin-disabled hotkey has no effect (not even its native function); and 2) Joystick hotkeys: although IfWin works, it never prevents other programs from seeing the press of a button.
A particular hotkey can be created more than once if each definition has different IfWin criteria. These are known as hotkey variants. For example:
Hotkey, IfWinActive, ahk_class Notepad
Hotkey, ^!c, MyLabelForNotepad
Hotkey, IfWinActive, ahk_class WordPadClass
Hotkey, ^!c, MyLabelForWordPad
Hotkey, IfWinActive
Hotkey, ^!c, MyLabelForAllOtherWindows
If more than one variant of a hotkey is eligible to fire, only the one created earliest will fire. The exception to this is the global variant (the one with no IfWin criteria): It always has the lowest precedence, and thus will fire only if no other variant is eligible.
The order of modifier symbols such as ^!+# does not matter. For example, ^!c is the same as !^c. However, any hotkey with a wildcard prefix (*) is entirely separate from a non-wildcard one; for example, *F1 and F1 would each have their own set of variants.
For more information about IfWin hotkeys, see #IfWin's General Remarks.
Hotkey Symbols, #IfWinActive/Exist, #MaxThreadsBuffer, #MaxThreadsPerHotkey, Suspend, IsLabel(), Threads, Thread, Critical, Gosub, Return, Menu, SetTimer
Hotkey, ^!z, MyLabel
return
MyLabel:
MsgBox You pressed %A_ThisHotkey%.
return
; Other examples: Hotkey, RCtrl & RShift, AltTab ; Makes RCtrl & RShift operate like Alt-Tab. Hotkey, #c, On ; Re-enables the Win-C hotkey. Hotkey, $+#c, Off ; Disables the Shift-Win-C hotkey. Hotkey, ^!a, , T5 ; Changes the hotkey to allow 5 threads. Hotkey, IfWinActive, ahk_class Notepad Hotkey, ^!c, MyLabelForNotepad ; Creates Ctrl-Alt-C as a hotkey that works only in Notepad.