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

Umgekehrt werden alle Modifikatoren auf der linken Seite (nicht auf der rechten Seite) automatisch losgelassen, wenn die Taste gesendet wird. Zum Beispiel erzeugen die folgenden zwei Zeilen ein kleines "b", wenn Sie entweder Umschalt+A oder Strg+A drücken:

A::b
^a::b

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 HotIf-Direktive kann verwendet werden, um eine oder mehrere Neubelegungen nur für bestimmte Fenster aktiv zu machen. Zum Beispiel:

#HotIf WinActive("ahk_class Notepad")
a::b  ; 'a' verhält sich in Notepad wie 'b'.
#HotIf  ; 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 " ThisHotkey " gedrückt."

Alternativ kann #InputLevel verwendet werden, um das Standardverhalten zu überschreiben. Zum Beispiel:

#InputLevel 1
a::b

#InputLevel 0
^!b::ToolTip "Sie haben " ThisHotkey " gedrückt."

Die Verwendung von SendMode während der Startphase des Skripts 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 während der Startphase des Skripts auf SendMode "Play", 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.

Wenn Zieltaste { sein soll, muss es mit einem Escapezeichen versehen werden; zum Beispiel x::`{. Andernfalls wird es als geschweifte Startklammer für die Funktion des Hotkeys interpretiert.

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-Funktionen im Skript nicht davon ausgehen, dass "b" beim Senden unten bleiben soll.
}

*a up::
{
    SetKeyDelay -1  ; Siehe Hinweis unten, warum die Druckdauer bei beiden SetKeyDelays fehlt.
    Send "{Blind}{b Up}"
}

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. Dies stellt sicher, dass das System Alt-Tastenkombinationen so übersetzt, als würde Strg nicht gedrückt gehalten, bewirkt aber auch, dass die Neubelegung jedes vorherige {Ctrl down} überschreibt. [v2.0.8+]: Das nicht unterdrückte Strg-Taste-Oben wird aus Gründen der Abwärtskompatibilität weiterhin gesendet, wird aber für seinen ursprünglichen Zweck nicht mehr benötigt. Der Nebeneffekt kann vermieden werden, indem die Neubelegung mit einem expliziten Hotkey-Paar ersetzt wird, wie oben gezeigt.
  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}"
    }
  3. Wenn die Originaltaste eine benutzerdefinierte Kombination ist, wird der Platzhaltermodifikator (*) weggelassen, damit der Hotkey funktioniert.
  4. Wenn die Modifikatorsymbole !#^+ auf die Originaltaste und nicht auf die Zieltaste angewendet werden, werden sie nach dem Wort "Blind" eingefügt, damit diese Modifikatoren von Send losgelassen werden können. ^a::b beispielsweise verwendet {Blind^}. <^a::b verwendet auch {Blind^}, was in Kombination mit RCtrl zu unerwarteten Ergebnissen führen kann. Weitere Informationen finden Sie unter Blind-Modus.

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 während der Startphase des Skripts in Kraft gesetzt wird, für alle Neubelegungen gelten.

Da Neubelegungen, wie oben beschrieben, in Hotkeys übersetzt werden, können sie von der Suspend-Funktion beeinflusst und mit der Hotkey-Funktion deaktiviert oder modifiziert werden. Zum Beispiel würden die beiden folgenden Funktionen 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}"
}

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

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.