Ein Hotkey ist eine Taste oder Tastenkombination, die eine Aktion auslöst. So wird z.B. mit Win+E normalerweise der Dateiexplorer gestartet und mit F1 häufig eine programmspezifische Hilfefunktion aktiviert. AutoHotkey bietet die Möglichkeit, Hotkeys zu definieren, die überall oder nur in bestimmten Applikationen jede erdenkliche Aktion ausführen können.
Die Definition eines Hotkeys erfolgt in der Regel durch die Angabe des Hotkey-Namens, gefolgt von einem Doppelpunktpaar und dann der Aktion:
#n::Run "notepad"
Dieses Beispiel definiert einen Hotkey, der Notepad startet, wenn Sie Win+N drücken. Wie Sie es ausprobieren können, erfahren Sie unter Wie man Beispielcodes ausführt.
Weitere Informationen zum Ausführen von Programmen finden Sie unter Wie man Programme ausführt.
Wenn mehrere Zeilen erforderlich sind, verwenden Sie geschweifte Klammern, um den Anfang und das Ende der Hotkey-Aktion zu markieren. Dies wird als Block bezeichnet.
#n:: { if WinExist("ahk_class Notepad") WinActivate ; Das oben gefundene Fenster aktivieren else Run "notepad" ; Ein neues Notepad-Fenster öffnen }
Die geschweifte Startklammer kann auf derselben Zeile wie der Hotkey stehen, nach ::
.
Der Block nach einem Doppelpunktpaar-Hotkey ist implizit der Körper einer Funktion, aber diese Information ist nur wichtig, wenn Sie Ihre eigenen Variablen definieren. Für den Moment genügt es zu wissen, dass mit einem Block mehrere Zeilen zu einer einzigen Aktion oder Anweisung zusammengefasst werden (siehe Kontrollfluss für weitere Informationen).
Bei den meisten Hotkeys besteht der Hotkey-Name aus optionalen Modifikatorsymbolen, unmittelbar gefolgt von einem einzelnen Buchstaben oder Symbol oder einem Tastennamen. Probieren Sie die folgenden Änderungen am obigen Beispiel aus:
#
, damit der Hotkey immer dann aktiviert wird, wenn Sie nur N drücken. Denken Sie daran, dass Sie das Skript jederzeit beenden können, wenn etwas schief geht.#
mit ^
für STRG, !
für ALT oder +
für UMSCHALT, oder probieren Sie Kombinationen aus.#
mit <^
, damit der Hotkey nur aktiviert wird, wenn die linke STRG-Taste gedrückt wird, oder mit >^
für die rechte STRG-Taste, oder mit beiden, damit beide Tasten benötigt werden.n
mit einem anderen Buchstaben oder Symbol (außer :
).n
mit einem Namen aus der Tastenliste.Hinweis: Das letzte Zeichen vor ::
wird nie als Modifikatorsymbol interpretiert.
Bei dieser Art von Hotkey kann nur die letzte Taste in der Kombination direkt als einzelnes Zeichen geschrieben oder ihr Name vollständig ausgeschrieben werden. Zum Beispiel:
#::
würde einen Hotkey erstellen, der durch Drücken der Raute-Taste oder einer anderen Kombination mit diesem Symbol aktiviert wird (im US-Layout ist dies Umschalt+3).##::
würde einen Hotkey wie oben erstellen, der aber nur aktiviert wird, wenn Sie zusätzlich die Windows-Taste gedrückt halten.LWin::
würde einen Hotkey erstellen, der durch Drücken der linken Windows-Taste ohne Gedrückthalten einer anderen Modifikatortaste aktiviert wird.Die regulären Modifikatoren sind STRG (^
), ALT (!
), UMSCHALT (+
) und WIN (#
).
Die Symbole <
und >
können jedem der vier oben genannten Modifikatoren vorangestellt werden, um die linke oder rechte Variante der jeweiligen Taste zu definieren. Die Modifikatorkombination <^>!
entspricht der AltGr-Taste (falls auf Ihrer Tastatur vorhanden), eine Kombination von LCtrl und RAlt.
Die anderen Modifikatoren sind:
*
(Platzhalter) befähigt den Hotkey, auch dann ausgelöst zu werden, wenn Modifikatortasten gedrückt gehalten werden, für die der Hotkey kein Symbol hat.~
(keine Unterdrückung) verhindert, dass der Hotkey die native Funktion der Taste blockiert.$
(Hook nutzen) verhindert ungewollte Schleifen beim Senden von Tasten und macht den Hotkey in einigen Fällen zuverlässiger.Um einen Hotkey nur beim Loslassen und nicht beim Drücken der Taste auszulösen, verwenden Sie das UP-Suffix.
Siehe auch: Hotkey-Modifikatorsymbole, Tastenliste
Mit der #HotIf-Direktive kann eine Bedingung angegeben werden, die für die Aktivierung des Hotkeys erfüllt sein muss, zum Beispiel:
Zum Beispiel:
#HotIf WinActive("ahk_class Notepad") ^a::MsgBox "Sie haben STRG+A gedrückt, während Notepad aktiv war. Drückt man STRG+A in einem anderen Fenster, wird die Tastenkombination selbst gesendet." #c::MsgBox "Sie haben WIN+C gedrückt, während Notepad aktiv war." #HotIf #c::MsgBox "Sie haben WIN+C gedrückt, während ein anderes Fenster als Notepad aktiv war."
Die Bedingung wird durch Angabe eines Ausdrucks definiert, der jedes Mal ausgewertet wird, wenn der Hotkey gedrückt wird. Wenn die Auswertung des Ausdrucks True ergibt, wird die Aktion des Hotkeys ausgeführt.
Derselbe Hotkey kann mehrfach verwendet werden, indem für jedes Vorkommen des Hotkeys (auch Hotkey-Variante genannt) eine andere Bedingung angegeben wird. Wenn Sie den Hotkey drücken, führt das Programm die erste Hotkey-Variante aus, deren Bedingung erfüllt ist, oder die Variante ohne Bedingung (z.B. das letzte #c::
im obigen Beispiel).
Wenn die Bedingung des Hotkeys nicht erfüllt ist und es keine bedingungslose Variante des Hotkeys gibt, wird der Tastendruck an das aktive Fenster weitergeleitet, als wäre der Hotkey nie definiert worden. Wenn z.B. Notepad nicht aktiv ist, während das obige Beispiel läuft, wird Strg+A seine normale Funktion ausführen (üblicherweise "Alles markieren").
Probieren Sie die folgenden Änderungen am Beispiel aus:
WinActive
mit WinExist
, damit die Hotkeys auch dann aktiviert werden, wenn Notepad nicht den Fokus hat.GetKeyState("CapsLock", "T")
, damit die Hotkeys nur aktiviert werden, wenn die Feststelltaste eingeschaltet ist.Um korrekt zu bestimmen, auf welches Fenster sich der Hotkey auswirken soll, müssen manchmal andere Kriterien als der Fenstertitel verwendet werden. Weitere Informationen finden Sie unter Wie man Fenster manipuliert.
Siehe auch: #HotIf, Ausdrücke (Expressions), WinActive
Eine benutzerdefinierte Kombination ist ein Hotkey, der zwei Tasten kombiniert, die normalerweise nicht zusammen gehören. Zum Beispiel definiert Numpad0 & Numpad1::
einen Hotkey, der aktiviert wird, wenn Numpad0 gedrückt gehalten und Numpad1 gedrückt wird.
Wenn Sie eine Taste als Präfix in einer benutzerdefinierten Kombination verwenden, geht AutoHotkey davon aus, dass Sie nicht möchten, dass die normale Funktion dieser Taste aktiviert wird, da dies mit ihrer Verwendung als Modifikatortaste kollidieren würde. Es gibt zwei Möglichkeiten, die normale Funktion der Taste wiederherzustellen:
Numpad0::Send "{Numpad0}"
, um die ursprüngliche Funktion der Taste wiederherzustellen. Standardmäßig wird der Hotkey nur aktiviert, wenn Sie Numpad0 loslassen, und nur, wenn Sie Numpad0 und Numpad1 nicht in Kombination gedrückt haben.~Numpad0 & Numpad1::
. Dadurch wird verhindert, dass AutoHotkey die normale Funktion von Numpad0 unterdrückt, es sei denn, Sie haben auch Numpad0::
definiert, dann sorgt das Tildezeichen dafür, dass dieser Hotkey sofort aktiviert wird und nicht erst, wenn Sie Numpad0 loslassen.Hinweis: Benutzerdefinierte Kombinationen unterstützen nur 2-Tasten-Kombinationen und können nicht mit anderen Modifikatoren kombiniert werden, wie z.B. !#^+
für ALT, WIN, STRG und UMSCHALT.
Obwohl AutoHotkey benutzerdefinierte Kombinationen von mehr als zwei Tasten nicht direkt unterstützt, kann ein ähnliches Ergebnis mit #HotIf erzielt werden. Wenn Sie das folgende Beispiel ausführen und Strg+Feststell+Leer oder Strg+Leer+Feststell drücken, sollte eine Meldung erscheinen:
#HotIf GetKeyState("Ctrl") Space & CapsLock:: CapsLock & Space::MsgBox "Erfolg!"
In diesem Beispiel muss zuerst STRG gedrückt werden. Dies hat den Vorteil, dass die Leer- und Feststelltaste ihre normale Funktion ausführen, wenn Sie STRG nicht gedrückt halten.
Siehe auch: Benutzerdefinierte Kombinationen
Die Hotkeys von AutoHotkey bieten noch einige andere Features, die es zu erkunden lohnt. Während die meisten Applikationen nur Kombinationen von STRG, ALT, UMSCHALT und manchmal WIN mit nur einer weiteren Taste ermöglichen (und oft nicht alle Tasten unterstützen), ist AutoHotkey nicht so eingeschränkt. Weitere Informationen finden Sie unter Hotkeys.