Neubelegung von Tasten (Tastatur, Maus und Controller)

Inhaltsverzeichnis

Einführung

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.

Neubelegung von Tastatur und Maus

Die Syntax für die Neubelegung einer Taste lautet Originaltaste::Zieltaste. Ein Skript, das nur die folgende Zeile enthält, würde z.B. dafür sorgen, dass sich A wie B verhält:

a::b

Das obige Beispiel ändert nichts an B selbst. B sendet weiterhin "b", es sei denn, Sie belegen die Taste mit etwas anderem, wie im folgenden Beispiel:

a::b
b::a

Die obigen Beispiele verwenden Kleinbuchstaben, was für die meisten Zwecke zu empfehlen ist, da auch die entsprechenden Großbuchstaben neubelegt 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 der obigen ist, nicht so funktionieren, wie man es erwarten würde, da eine Neubelegung niemals die Modifikatortasten "loslässt", mit denen sie ausgelöst wurde. Zum Beispiel ist A::b in der Regel äquivalent zu A::B und ^a::b äquivalent zu ^a::^b. Der Grund dafür ist, dass jede Neubelegung intern den Blind-Modus verwendet, damit die Taste oder Tastenkombination mit anderen Modifikatoren kombiniert werden kann.

Neubelegung der Maus

Maustasten können auf die gleiche Weise 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.

Weitere nützliche Neubelegungen

Beispiel Beschreibung
CapsLock::Ctrl Feststell verhält sich wie Strg. Um Feststell weiterhin ein- und 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- und auszuschalten. Da beide Neubelegungen das Gedrückthalten zusätzlicher Modifikatortasten erlauben, muss die spezifischere Neubelegung +CapsLock::CapsLock zuerst gesetzt werden, damit dies 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 aber 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 durch Verwendung von 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.

Bemerkungen

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 in Notepad wie 'b'.
#IfWinActive  ; Macht nachfolgende Neubelegungen und Hotkeys für alle Fenster wirksam.

Die Neubelegung einer Taste ist in den folgenden Fällen "vollständig":

Eine neubelegte Taste kann normale Hotkeys auslösen, aber standardmäßig keine Maus- oder Hook-Hotkeys (mit ListHotkeys können Sie herausfinden, welche Hotkeys "gehookt" sind). Wenn Sie z.B. die Neubelegung a::b verwenden und Strg+Alt+A drücken, wird der ^!b-Hotkey 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 Verwendung von SendMode im automatischen Ausführungsbereich (ganz oben im Skript) beeinflusst alle Neubelegungen. Da aber jede Neubelegung Send {Blind} verwendet und der SendPlay-Modus {Blind} nicht vollständig unterstützt, kann es vorkommen, dass einige Neubelegungen im SendPlay-Modus nicht korrekt funktionieren (insbesondere Strg, Umschalt, Alt und Win). Um das zu umgehen, verzichten Sie im automatischen Ausführungsbereich auf SendPlay, wenn Sie Neubelegungen verwenden, und ersetzen Sie jedes Send im Skript mit SendPlay. Alternativ können Sie Ihre Neubelegungen in Hotkeys übersetzen (wie unten beschrieben), die explizit SendEvent statt Send aufrufen.

Beim Start 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   ; Wenn die Zieltaste eine Maustaste ist, wird stattdessen SetMouseDelay verwendet.
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 Hinweis unten, warum die Druckdauer bei beiden SetKeyDelays fehlt.
Send {Blind}{b up}
return

Allerdings unterscheiden sich die obigen Hotkeys unter folgenden Umständen:

  1. Wenn die Originaltaste die linke Strg-Taste und die Zieltaste Alt ist, wird die Zeile Send {Blind}{LAlt DownR} mit Send {Blind}{LCtrl up}{LAlt DownR} ersetzt. Dasselbe gilt, wenn die Originaltaste die rechte Strg-Taste ist, außer dass stattdessen {RCtrl up} verwendet wird.
  2. Beim Neubelegen einer Tastaturtaste in eine Maustaste (z.B. RCtrl::RButton) verwenden die obigen Hotkeys SetMouseDelay statt SetKeyDelay. Außerdem wird oben der erste Hotkey 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
  3. Wenn die Originaltaste eine benutzerdefinierte Kombination in [v1.1.27.01+] ist, wird der Platzhaltermodifikator (*) weggelassen, damit der Hotkey funktioniert.

Vor [v1.1.27] wurde DownTemp statt DownR verwendet.

Beachten Sie, dass bei den obigen Hotkeys der zweite SetKeyDelay-Parameter (Druckdauer) weggelassen wurde, da eine Druckdauer nicht für Nur-Unten- oder Nur-Oben-Ereignisse wie {b down} und {b up} gilt. Allerdings gilt die Druckdauer für Statusänderungen bei Modifikatortasten (Umschalt, Strg, Alt und Win), 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 beiden folgenden Befehle die Neubelegung a::b deaktivieren.

Hotkey, *a, Off
Hotkey, *a up, Off

Alt-Tab-Probleme: Wenn Sie eine Taste zu Alt umbelegen, können Sie mit dieser Taste wahrscheinlich keine vernünftigen Alt-Tab-Aktionen durchführen. Eine mögliche Übergangslösung ist es, den Hotkey *Tab::Send {Blind}{Tab} hinzuzufügen - aber seien Sie sich bewusst, dass dieser Hotkey wahrscheinlich die Verwendung 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.

Zusätzlich zu den Tasten aus der Tastenliste kann die Originaltaste auch eine virtuelle Taste (VKnn) oder ein Scancode (SCnnn) sein, wie im Abschnitt Sondertasten beschrieben. 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 z.B. sc01e::vk42sc030 dasselbe wie a::b.

Um eine Taste zu deaktivieren, anstatt sie neu zu belegen, verwenden Sie ein Return. Zum Beispiel bewirkt F1::Return, dass F1 deaktiviert wird.

Die folgenden Tasten werden von der internen Neubelegungsmethode nicht unterstützt:

Mauszeiger mit der Tastatur bewegen

Es ist möglich, den Mauszeiger mit der Tastatur zu bewegen, wie das voll funktionsfähige Tastatur-zu-Maus-Skript zeigt. Dieses Skript ermöglicht unter anderem eine flüssige Mausbewegung und -beschleunigung. Es ist für Benutzer gedacht, die viele Mausaktionen mit der Tastatur ausführen möchten. Das folgende Beispiel ist eine vereinfachte Version:

*#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-Autowiederholung daran, den Mausklick zu wiederholen.
SendEvent {Blind}{LButton up}
return

*<#AppsKey::  ; WIN-LINKS + MENÜ => Rechtsklick
SendEvent {Blind}{RButton down}
KeyWait AppsKey  ; Hindert die Tastatur-Autowiederholung daran, den Mausklick zu wiederholen.
SendEvent {Blind}{RButton up}
return

Neubelegung via Registry (Scancode Map)

Vorteile:

Nachteile:

Wie man Änderungen an der Registry vornimmt: Es gibt mindestens zwei Methoden, wie man Tasten via Registry neubelegen kann:

  1. Verwenden Sie Hilfsprogramme wie KeyTweak (Freeware), um Tasten visuell neu zu belegen. Solche Programme ändern die Registry für Sie.
  2. Verwenden Sie eine .reg-Datei (Klartext), um neubelegte Tasten manuell in die Registry zu laden. Einzelheiten finden Sie im archivierten Forum.