Neubelegung von Tasten

Einführung

Einschränkung: Das unten beschriebene Neubelegungs-Feature von AutoHotkey ist in der Regel nicht so eindeutig und effektiv wie das direkte Neubelegen mit der Windows-Registry. Die Vor- und Nachteile der einzelnen Methoden finden Sie unter Neubelegung mit der Registry.

Neubelegung von Tastatur und Maus

Die Syntax zum Neubelegen einer Taste ist Originaltaste::Zieltaste. Enthält ein Skript beispielsweise nur die folgende Zeile, würde sie die A-Taste dazu bringen, sich wie die B-Taste zu verhalten:

a::b

Im oberen Beispiel wird die B-Taste selbst nicht geändert. Die B-Taste würde weiterhin ein "b" senden, sofern Sie sie auch nicht neubelegen, wie z. B.:

a::b
b::a

Es reicht vollkommen aus, bei den meisten Neubelegungen Kleinbuchstaben zu verwenden, weil deren Großbuchstaben auch mit neubelegt werden (das heißt: Drückt man die neubelegte Taste bei aktivierter FESTSTELL-Taste oder beim Drücken der UMSCHALT-Taste, würde automatisch ein Großbuchstabe gesendet werden). Ein Großbuchstabe als Zieltaste würde hingegen die Großschreibung erzwingen. Das folgende Beispiel würde ein großgeschriebenes B erzeugen, wenn Sie entweder "a" oder "A" eingeben (sofern die FESTSTELL-Taste 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 {Blind} verwendet, damit die Taste oder Tastenkombination mit anderen Modifikatoren kombiniert werden kann.

 

Neubelegung der Maus: Um die Maus statt Tastatur neu zu belegen, nutzt man den gleichen Ansatz. Zum Beispiel:

MButton::Shift Bringt die mittlere Maustaste dazu, sich wie die UMSCHALT-Taste zu verhalten.
XButton1::LButton Bringt die vierte Maustaste dazu, sich wie die linke Maustaste zu verhalten.
RAlt::RButton Bringt die rechte ALT-Taste dazu, sich wie die rechte Maustaste zu verhalten.

 

Weitere nützliche Neubelegungen:

CapsLock::Ctrl Bringt die FESTSTELL-Taste dazu, sich wie die STRG-Taste zu verhalten. Damit die FESTSTELL-Taste weiterhin ein- oder ausgeschaltet werden kann, fügt man zuerst die Neubelegung +CapsLock::CapsLock hinzu. Diese Neubelegung schaltet die FESTSTELL-Taste ein oder aus, wenn Sie die UMSCHALT-Taste gedrückt halten und die FESTSTELL-Taste drücken. Da bei beiden Neubelegungen zusätzliche Modifikatortasten gedrückt gehalten werden können, muss die spezifischere Neubelegung +CapsLock::CapsLock an erster Stelle gesetzt werden, bevor es funktionieren kann.
XButton2::^LButton Bringt die fünfte Maustaste (XButton2) dazu, STRG+MAUSTASTE-LINKS zu erzeugen.
RAlt::AppsKey Bringt die rechte ALT-Taste dazu, sich wie die MENÜ-Taste zu verhalten (das ist die Taste zum Öffnen des Kontextmenüs).
RCtrl::RWin Bringt die rechte STRG-Taste dazu, sich wie die rechte WIN-Taste zu verhalten.
Ctrl::Alt Bringt die STRG-Taste dazu, sich wie die ALT-Taste zu verhalten. Siehe jedoch Alt-Tab-Probleme.
^x::^c Bringt STRG+X dazu, STRG+C zu erzeugen. Sie würde auch STRG+ALT+X dazu bringen, STRG+ALT+C zu erzeugen, usw.
RWin::Return Bringt die rechte WIN-Taste dazu, nichts zu tun (siehe Return).

Sie können die hier genannten Beispiele ausprobieren, indem Sie sie in eine neue Textdatei (z. B. "Remap.ahk") kopieren und anschließend starten.

In der Tastenliste finden Sie alle möglichen Namen der Tastatur- und Maustasten.

Bemerkungen

Mit den Direktiven #IfWinActive/Exist können Neubelegungen bestimmt werden, die nur für das angegebene Fenster gültig sein sollen. Zum Beispiel:

#IfWinActive ahk_class Notepad
a::b  ; Bringt 'a' dazu, sich im Texteditor wie 'b' zu verhalten.
#IfWinActive  ; Macht nachfolgende Neubelegungen und Hotkeys für alle Fenster geltend.

Das Neubelegen einer Taste wird bei folgenden Punkten als "vollständig" angesehen:

Eine neubelegte Taste kann normale Hotkeys auslösen, aber standardmäßig keine Maus- oder Hook-Hotkeys (mit ListHotkeys können Sie herausfinden, welche Hotkeys das Hook-Feature haben). Bei dem Beispiel a::b würde durch Drücken von STRG+ALT+A der Hotkey ^!b ausgelöst werden, sofern ^!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 #InputLevel als alternativer Weg verwendet werden, um das Standardverhalten zu überschreiben. Zum Beispiel:

#InputLevel 1
a::b

#InputLevel 0
^!b::
ToolTip Sie haben %A_ThisHotkey% gedrückt.
return

Ein SendMode im automatischen Ausführungsbereich (oberster Bereich des Skripts) beeinflusst alle Neubelegungen. Da beim Neubelegen Send {Blind} gilt und der SendPlay-Modus {Blind} nicht richtig unterstützt, kann es passieren, dass einige Neubelegungen nicht korrekt im SendPlay-Modus laufen (besonders STRG, UMSCHALT, ALT und WIN). Um das zu umgehen, verzichtet man im automatischen Ausführungsbereich auf SendPlay, wenn Neubelegungen vorhanden sind; ersetzen Sie stattdessen an anderen Stellen des Skripts Send durch SendPlay. Alternativ können Sie Ihre Neubelegungen in Hotkeys umwandeln (wie unten beschrieben), die explizit SendEvent statt Send aufrufen.

Beim Starten eines Skripts wird jede Neubelegung in ein Hotkey-Paar umgewandelt. Zum Beispiel würde ein Skript, das a::b enthält, eigentlich folgende zwei Hotkeys enthalten:

*a::
SetKeyDelay -1   ; Ist die Zieltaste eine Maustaste, dann stattdessen SetMouseDelay.
Send {Blind}{b DownR}  ; DownR ist 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:

  1. Wenn die Originaltaste LCtrl und die Zieltaste eine ALT-Taste ist, wird die Zeile Send {Blind}{LAlt DownR} durch Send {Blind}{LCtrl up}{LAlt DownR} ersetzt. Das Gleiche gilt, wenn die Originaltaste RCtrl ist, aber dann stattdessen {RCtrl up}.
  2. Wenn eine Tastatur-Taste dazu gebracht wird, eine Maustaste zu sein (z. B. RCtrl::RButton), verwenden die obigen Hotkeys SetMouseDelay statt SetKeyDelay. Darüber hinaus wird der erste Hotkey oben mit dem folgenden Hotkey ersetzt, um das Auto-Wiederholungs-Feature der Tastatur daran zu hindern, wiederholende Mausklicks zu generieren:
    *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 Platzhalter-Modifikator (*) weggelassen, damit der Hotkey ordnungsgemäß funktionieren kann.

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

Beachten Sie, dass SetKeyDelay's zweiter Parameter (Druckdauer) bei den Hotkeys oben fehlt. Das liegt daran, dass die Druckdauer nicht auf Nur-Unten- oder Nur-Oben-Ereignisse angewendet wird, wie z. B. {b down} und {b up}. Allerdings wird sie auf Änderungen in Bezug auf den Zustand der Tasten UMSCHALT, STRG, ALT und WIN angewendet, das Neubelegungen wie a::B oder a::^b beeinflusst. Folglich würde jede Druckdauer, die im automatischen Ausführungsbereich in Kraft gesetzt wird, für alle Neubelegungen gelten.

Da Neubelegungen in Hotkeys umgewandelt werden, wie oben beschrieben, können sie vom Suspend-Befehl beeinflusst werden. Ebenso könnte der Hotkey-Befehl eine Neubelegung deaktivieren oder ändern. 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 oder Maustaste zu einer ALT-Taste neubelegt haben, wird diese Taste wahrscheinlich nicht in der Lage sein, ein Alt-Tab richtig durchzuführen. Eine mögliche Übergangslösung ist es, den Hotkey *Tab::Send {Blind}{Tab} einzufügen. Aber beachte, dass dieser Hotkey Probleme verursachen kann, wenn die echte ALT-Taste zum Alt-Tabbing verwendet wird. Er sollte daher nur verwendet werden, wenn Sie ausschließlich mit neubelegten Tasten und/oder Alt-Tab-Hotkeys Alt-Tabbing durchführen.

Zusätzlich zu den Tasten und Maustasten in der Tastenliste kann die Originaltaste auch eine virtuelle Taste (VKnn) oder ein Scancode (SCnnn) sein (siehe Sondertasten). Das gleiche gilt für die Zieltaste, außer dass nach der virtuellen Taste optional auch ein Scancode 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, erstellt man einen einzeiligen Hotkey, der ein Return auslöst. Zum Beispiel würde F1::Return die F1-Taste deaktivieren.

Folgende Tasten werden nicht von der internen Neubelegungsmethode unterstützt:

Bewegung des Mauszeigers per Tastatur

Im vollausgestatteten Tastatur-zu-Maus-Skript wird gezeigt, wie der Mauszeiger mit der Tastatur bewegt werden kann. Da dieses Skript eine reibungslose Mausbewegung, -beschleunigung und andere Features bietet, sollten Sie es verwenden, wenn Sie vorhaben, die Mausaktivitäten häufig mit der Tastatur durchzuführen. 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 => Linker Mausklick (halte STRG/UMSCHALT gedrückt, um ein STRG+Klick oder UMSCHALT+Klick zu machen).
SendEvent {Blind}{LButton down}
KeyWait RCtrl  ; Hindert die Tastatur-Auto-Wiederholung daran, den Mausklick zu wiederholen.
SendEvent {Blind}{LButton up}
return

*<#AppsKey::  ; WIN-LINKS + MENU => Rechter Mausklick
SendEvent {Blind}{RButton down}
KeyWait AppsKey  ; Hindert die Tastatur-Auto-Wiederholung daran, den Mausklick zu wiederholen.
SendEvent {Blind}{RButton up}
return

Neubelegung via Registry's "Scancode Map"

Vorteile:

Nachteile:

Wie Änderungen an der Registry vorgenommen werden können: Es gibt mindestens zwei Methoden zum Neubelegen von Tasten per Registry:

  1. Mit einem Programm wie KeyTweak (Freeware) können Sie visuell Tasten neubelegen. Dieses Programm ändert automatisch die Registry für Sie.
  2. Sie können Tasten manuell neubelegen, indem Sie eine .reg-Datei (Klartext) erstellen und sie in die Registry laden. Siehe dazu www.autohotkey.com/forum/post-56216.html#56216.

Siehe auch

Liste mit Tasten
GetKeyState
Neubelegung eines Joysticks