Einschränkung: Die unten beschriebene Neubelegungsmethode von AutoHotkey ist in der Regel nicht so eindeutig und effektiv wie die direkte Neubelegung via Windows-Registry. Die Vor- und Nachteile der einzelnen Ansätze finden Sie unter Neubelegung via Registry.
Die Syntax zum Neubelegen einer Taste ist Originaltaste::Zieltaste
. Ein Skript, das nur die folgende Zeile enthält, würde zum Beispiel dafür sorgen, dass sich A wie B verhält:
a::b
Das obige Beispiel führt keine Änderung an B selbst durch. B sendet weiterhin "b", es sei denn, Sie belegen die Taste wie im folgenden Beispiel mit etwas anderem:
a::b b::a
Die obigen Beispiele verwenden Kleinbuchstaben. Die Kleinschreibung wird für die meisten Zwecke empfohlen, da damit auch die entsprechenden Großbuchstaben abgedeckt werden. Mit anderen Worten: Es werden Großbuchstaben gesendet, wenn Feststell eingeschaltet ist oder Umschalt gedrückt gehalten wird. Ein Großbuchstabe als Zieltaste würde hingegen die Großschreibung erzwingen. Das folgende Beispiel erzeugt ein großes B, wenn Sie entweder "a" oder "A" eingeben (sofern Feststell ausgeschaltet ist):
a::B
Allerdings würde eine Neubelegung, die das Gegenteil zu der oberen Neubelegung ist, nicht so funktionieren, wie man es erwarten würde, da eine Neubelegung niemals die Modifikatortasten "loslässt", mit denen sie ausgelöst wurde. A::b
beispielsweise ist in der Regel identisch zu A::B
, und ^a::b
identisch zu ^a::^b
. Das liegt daran, dass jede Neubelegung intern den Blind-Modus verwendet, damit die Taste oder Tastenkombination mit anderen Modifikatoren kombiniert werden kann.
Maustasten können mit derselben Vorgehensweise neubelegt werden. Zum Beispiel:
Beispiel | Beschreibung |
---|---|
MButton::Shift |
Die mittlere Maustaste verhält sich wie Umschalt. |
XButton1::LButton |
Die vierte Maustaste verhält sich wie die linke Maustaste. |
RAlt::RButton |
Die rechte Alt-Taste verhält sich wie die rechte Maustaste. |
Beispiel | Beschreibung |
---|---|
CapsLock::Ctrl |
Feststell verhält sich wie Strg. Um Feststell weiterhin ein- oder ausschalten zu können, fügen Sie zunächst die Neubelegung +CapsLock::CapsLock hinzu. Dies ermöglicht es Ihnen, Feststell durch Halten von Umschalt und Drücken von Feststell ein- oder auszuschalten. Da bei beiden Neubelegungen zusätzliche Modifikatortasten gedrückt gehalten werden können, muss die spezifischere Neubelegung +CapsLock::CapsLock zuerst platziert werden, damit sie funktioniert. |
XButton2::^LButton |
Die fünfte Maustaste (XButton2) erzeugt einen via STRG modifizierten Klick. |
RAlt::AppsKey |
Die rechte Alt-Taste verhält sich wie Menü (die Taste zum Öffnen des Kontextmenüs). |
RCtrl::RWin |
Die rechte Strg-Taste verhält sich wie die rechte Win-Taste. |
Ctrl::Alt |
Beide Strg-Tasten verhalten sich wie Alt. Siehe jedoch Alt-Tab-Probleme. |
^x::^c |
Strg+X verhält sich wie Strg+C. Dies bewirkt auch, dass sich Strg+Alt+X wie Strg+Alt+C verhält, usw. |
RWin::Return |
Deaktiviert Win mittels einfachem Return. |
Um diese Beispiele zu testen, kopieren Sie sie in eine neue Textdatei, z. B. "Remap.ahk", und starten Sie die Datei.
In der Tastenliste finden Sie alle möglichen Namen der Tastatur- und Maustasten.
Die Direktiven #IfWinActive/Exist können verwendet werden, um eine oder mehrere Neubelegungen nur für bestimmte Fenster aktiv zu machen. Zum Beispiel:
#IfWinActive ahk_class Notepad a::b ; 'a' verhält sich im Texteditor wie 'b'. #IfWinActive ; Sorgt dafür, dass nachfolgende Neubelegungen und Hotkeys für alle Fenster aktiv sind.
Das Neubelegen einer Taste wird bei folgenden Punkten als "vollständig" angesehen:
b::a
würde beispielsweise Strg+A erzeugen, wenn Sie Strg+B drücken.Eine neubelegte Taste kann normale Hotkeys auslösen, aber standardmäßig keine Maus- oder Hook-Hotkeys (mit ListHotkeys können Sie herausfinden, welche Hotkeys "gehooked" sind). Nutzt man z. B. die Neubelegung a::b
und drückt man Strg+Alt+A, wird der Hotkey ^!b
nur ausgelöst, wenn ^!b
kein Hook-Hotkey ist. Wenn ^!b
ein Hook-Hotkey ist, können Sie ^!a
als Hotkey definieren, wenn Strg+Alt+A die gleiche Aktion ausführen soll wie Strg+Alt+B. Zum Beispiel:
a::b ^!a:: ^!b:: ToolTip Sie haben %A_ThisHotkey% gedrückt. return
In [v1.1.06+] kann alternativ #InputLevel verwendet werden, um das Standardverhalten zu überschreiben. Zum Beispiel:
#InputLevel 1 a::b #InputLevel 0 ^!b:: ToolTip Sie haben %A_ThisHotkey% gedrückt. return
Die Nutzung von SendMode im automatischen Ausführungsbereich (ganz oben im Skript) beeinflusst alle Neubelegungen. Da jede Neubelegung allerdings den Blind-Modus verwendet und die SendPlay-Methode diesen Modus nicht in vollem Umfang unterstützt, könnten einige Neubelegungen im SendPlay-Modus nicht richtig funktionieren (insbesondere Strg, Umschalt, Alt und Win). Um das zu umgehen, sollten Sie im automatischen Ausführungsbereich, sofern Neubelegungen vorhanden sind, auf SendPlay verzichten und jedes Send im Skript mit SendPlay ersetzen. Alternativ können Sie Ihre Neubelegungen in Hotkeys übersetzen (wie unten beschrieben), die explizit SendEvent statt Send aufrufen.
Beim Starten eines Skripts wird jede Neubelegung in ein Hotkey-Paar übersetzt. Zum Beispiel enthält ein Skript mit a::b
eigentlich die folgenden zwei Hotkeys:
*a:: SetKeyDelay -1 ; Nutzt SetMouseDelay, wenn die Zieltasten Maustasten sind. Send {Blind}{b DownR} ; DownR verhält sich wie Down, außer dass andere Send-Befehle im Skript nicht davon ausgehen, dass "b" beim Senden unten bleiben soll. return *a up:: SetKeyDelay -1 ; Siehe den Hinweis unten, warum die Druckdauer bei beiden SetKeyDelays fehlt. Send {Blind}{b up} return
Allerdings unterscheiden sich die obigen Hotkeys unter folgenden Umständen:
Send {Blind}{LAlt DownR}
durch Send {Blind}{LCtrl up}{LAlt DownR}
ersetzt. Das Gleiche gilt, wenn die Originaltaste die rechte Strg-Taste ist, außer dass stattdessen {RCtrl up}
verwendet wird.RCtrl::RButton
) verwenden die obigen Hotkeys SetMouseDelay statt SetKeyDelay. Außerdem wird der erste Hotkey oben mit folgendem ersetzt, um zu verhindern, dass die Autowiederholungsfunktion der Tastatur wiederholte Mausklicks erzeugt:
*RCtrl:: SetMouseDelay -1 if not GetKeyState("RButton") ; wenn die rechte Maustaste noch nicht unten ist ... Send {Blind}{RButton DownR} return
Vor [v1.1.27] wurde DownTemp statt DownR verwendet.
Beachten Sie, dass der zweite SetKeyDelay-Parameter (Druckdauer) bei den Hotkeys oben weggelassen wurde, da eine Druckdauer nicht auf Nur-Unten- oder Nur-Oben-Ereignisse wie {b down}
und {b up}
anwendbar sind. Allerdings wird sie auf Änderungen in Bezug auf den Zustand der Modifikatortasten (Umschalt, Strg, Alt und Win) angewendet, was sich auf Neubelegungen wie a::B
oder a::^b
auswirkt. Folglich würde jede Druckdauer, die im automatischen Ausführungsbereich in Kraft gesetzt wird, für alle Neubelegungen gelten.
Da Neubelegungen wie oben beschrieben in Hotkeys übersetzt werden, können sie vom Suspend-Befehl beeinflusst und mit dem Hotkey-Befehl deaktiviert oder modifiziert werden. Zum Beispiel würden die zwei folgenden Befehle die Neubelegung a::b
deaktivieren.
Hotkey, *a, Off Hotkey, *a up, Off
Alt-Tab-Probleme: Wenn Sie eine Taste mit Alt neubelegen, können Sie mit dieser wahrscheinlich keine vernünftigen Alt-Tab-Aktionen durchführen. Eine mögliche Übergangslösung ist es, den Hotkey *Tab::Send {Blind}{Tab}
einzufügen - aber seien Sie sich bewusst, dass dieser Hotkey wahrscheinlich die Nutzung der echten Alt-Taste bei Alt-Tab-Aktionen stören wird. Dieser Hotkey sollte daher nur verwendet werden, wenn Sie Alt-Tab-Aktionen ausschließlich mit neubelegten Tasten und/oder Alt-Tab-Hotkeys durchführen.
Neben den Tasten in der Tastenliste kann die Originaltaste auch eine virtuelle Taste (VKnn) oder ein Scancode (SCnnn) sein; siehe dazu Sondertasten. Dasselbe gilt für die Zieltaste, außer dass bei ihr optional ein Scancode nach der virtuellen Taste angegeben werden kann. Bei den meisten Tastaturbelegungen wäre beispielsweise sc01e::vk42sc030
das gleiche wie a::b
.
Um eine Taste zu deaktivieren statt neu zu belegen, verwenden Sie einfach ein Return. F1::Return
beispielsweise würde F1 deaktivieren.
Die folgenden Tasten werden nicht von der internen Neubelegungsmethode unterstützt:
vk13
oder den entsprechenden Scancode.x::+sc01A
und y::+sc01B
.Es ist möglich, den Mauszeiger mittels Tastatur zu bewegen, wie das voll funktionsfähige Tastatur-zu-Maus-Skript zeigt. Dieses Skript ermöglicht neben anderen Features eine flüssige Mausbewegung und -beschleunigung. Es ist für Benutzer gedacht, die viele Mausaktionen mit der Tastatur durchführen möchten. Das folgende Beispiel ist eine vereinfachte Version davon:
*#up::MouseMove, 0, -10, 0, R ; WIN + NACH-OBEN => Zeiger nach oben bewegen *#Down::MouseMove, 0, 10, 0, R ; WIN + NACH-UNTEN => Zeiger nach unten bewegen *#Left::MouseMove, -10, 0, 0, R ; WIN + NACH-LINKS => Zeiger nach links bewegen *#Right::MouseMove, 10, 0, 0, R ; WIN + NACH-RECHTS => Zeiger nach rechts bewegen *<#RCtrl:: ; WIN-LINKS + STRG-RECHTS => Linksklick (halten Sie STRG/UMSCHALT gedrückt, um einen via STRG oder UMSCHALT modifizierten Klick zu erzeugen). SendEvent {Blind}{LButton down} KeyWait RCtrl ; Hindert die Tastatur-Auto-Wiederholung daran, den Mausklick zu wiederholen. SendEvent {Blind}{LButton up} return *<#AppsKey:: ; WIN-LINKS + MENÜ => Rechter Mausklick SendEvent {Blind}{RButton down} KeyWait AppsKey ; Hindert die Tastatur-Auto-Wiederholung daran, den Mausklick zu wiederholen. SendEvent {Blind}{RButton up} return
Vorteile:
Nachteile:
Wie man Änderungen an der Registry vornimmt: Es gibt mindestens zwei Methoden, wie man Tasten via Registry neubelegen kann: