Umbelegen von Tasten


Einleitung

Das auf dieser Seite beschriebene Feature wird nicht auf Windows 95/98/Me oder für Joysticks unterstützt. Siege die folgenden Alternativ-Methoden:

Einschränkung : Das nachfolgend beschriebene Remapping per AutoHotkey ist im Allgemeinen nicht so effektiv wie das Remapping per Registry. Vor- und Nachteile für jeden Ansatz siehe unter Remapping per Registry.

Tastatur und Maus umbelegen

Die Syntax für das eingebaute Remapping ist Originaltaste::Zieltaste. Ein Script, das nur aus der folgenden Zeile besteht, gibt der Taste "a" das gleiche Verhalten wie der Taste "b":

a::b

Das obige Beispiel läßt die Taste "b" selber unverändert; sie sendet weiterhin das "b", bis ihr eine andere Aktion zugewiesen wird, wie im folgenden Beispiel:

a::b
b::a

Die in den obigen Beispielen verwendete Kleinschreibung ist für die meisten Zwecke zu empfehlen, weil sie auch die entsprechenden großgeschriebenen Buchstaben umbelegt (d. h., sie sendet bei eingeschaltetem Capslock oder gedrückter Shift-Taste den Buchstaben großgeschrieben). Durch Angabe eines Großbuchstaben auf der rechten Seite wird dagegen die Großschrift erzwungen. Die folgende Zeile würde z. B. ein großes "B" senden, wenn Sie entweder "a" oder "A" tippen (solange Capslock ausgeschaltet ist):

a::B

Umbelegung der Maus : Für die Umbelegung der Maus verwenden Sie den selben Ansatz wie bei der Tastatur. Beispiel:

MButton::ShiftDie mittlere Maustaste verhält sich wie die Shift-Taste.
XButton1::LButtonDie vierte Maustaste verhält sich wie die linke Maustaste.
RAlt::RButtonDie rechte Alt-Taste verhält sich wie die rechte Maustaste.

Andere nützliche Umbelegungen:

Capslock::Ctrl Capslock wird zur Strg-Taste. Um die Fähigkeit zu behalten Capslock ein- und auszuschalten füge auch folgende Umbelegung hinzu: +Capslock::Capslock (dies wechselt zwischen den Capslock-Zuständen "Ein" und "Aus", wenn du bei gedrückter Shift-Taste Capslock betätigst).
XButton2::^LButton Die fünfte Maustaste (XButton2) erzeugt einen Strg-Links-Tastendruck.
RAlt::AppsKey Die rechte Alt-Taste wird zur Kontextmenü-Taste.
RCtrl::RWin Die rechte Strg-Taste wird zur rechten Windows-Taste.
Ctrl::Alt Beide Strg-Tasten verhalten sich wie eine Alt-Taste. Siehe auch Alt-Tab-Probleme.
^x::^c Strg-X erzeugt Strg-C. Ebenso erzeugt Strg-Alt-X Strg-Alt-C, usw.
RWin::Return Macht die rechte Windows-Taste zu Return (und deaktiviert damit ihre ursprüngliche Funktion).

Sie können alle Beispiele ausprobieren, indem Sie sie in eine neue Textdatei wie "Remap.ahk" kopieren und dann die Datei ausführen.

Für eine vollständige Liste der Tasten-Namen von Tastatur und Maus siehe Tasten-Liste.

Anmerkungen

Mit den Anweisungen #IfWinActive/Exist lassen sich ausgewählte Umbelegungen auf von Ihnen angegebene Fenster beschränken. Beispiel:

#IfWinActive ahk_class Notepad
a::b ; Die Taste 'a' sendet eine 'b'-Taste, aber nur in Notepad.
#IfWinActive ; Die nachfolgenden Umbelegungen und Hotkeys gelten für alle Fenster.

Eine Taste wird eins zu eins umbelegt; d. h.:

Eine umbelegte Taste kann zwar normale Hotkeys, jedoch keine Maus-Hotkeys oder Hook-Hotkeys triggern (mit ListHotkeys sehen Sie, welche Hotkeys ihres Scripts "gehooked" sind). Gilt z.B. die Umbelegung a::b, triggert Strg-Alt-A den ^!b Hotkey nur, wenn ^!b kein Hook-Hotkey ist. Ist ^!b ein Hook-Hotkey, können Sie ^!a als Hotkey definieren, wenn Strg-Alt-A dasselbe wie Strg-Alt-B machen soll. Beispiel:
a::b
^!a::
^!b::
ToolTip Sie haben %A_ThisHotkey% gedrückt.
return

Wenn SendMode im Auto-Execute-Bereich (am Anfang des Scripts) benutzt wird, beeinflusst es alle Umbelegungen. Weil jedoch das Remapping Send {Blind} verwendet und SendPlay Modus {Blind} nicht komplett unterstützt, funktionieren evtl. im SendPlay Modus einige Umbelegungen nicht fehlerfrei (speziell Strg, Shift, Alt und Win). Um dies zu umgehen, vermeiden Sie SendPlay im Auto-Execute-Bereich, wenn Sie Umbelegungen haben; verwenden Sie dann im Script durchgehend den Befehl SendPlay statt Send. Alternativ dazu könnten Sie Ihre Umbelegungen in Hotkeys übersetzen (wie unten beschrieben), die explicit SendEvent statt Send aufrufen.

Nach dem Start eines Scripts wird jede Umbelegung in ein Hotkey-Paar übersetzt. Zum Beispiel enthält ein Script mit a::b genau genommen stattdessen die folgenden beiden Hotkeys:

*a::
SetKeyDelay -1 ; Bei einer Maustaste als Ziel wird stattdessen SetMouseDelay verwendet.
Send {Blind}{b DownTemp} ; DownTemp ist wie Down, mit der Ausnahme, dass nachfolgende Send-Befehle im Script das "b" als nicht (mehr) gedrückt ansehen.
return
*a up::
SetKeyDelay -1 ; Warum die Drück-Dauer mit keinem dieser SetKeyDelays angegeben ist, siehe die Anmerkung weiter unten.
Send {Blind}{b Up}
return

Die obigen Hotkeys können sich aber unter folgenden Umständen ändern:

  1. Wenn die Original-Taste LCtrl und das Ziel eine Alt-Taste ist, wird die Zeile Send {Blind}{LAlt DownTemp} durch Send {Blind} {LCtrl Up} {LAlt DownTemp} ersetzt. Dasselbe gilt für RCtrl, außer dass {RCtrl up} benutzt wird.
  2. Wenn eine Tastatur-Taste in eine Maustaste umbelegt wird, (z. B. RCtrl::RButton), benutzen die obigen Hotkeys SetMouseDelay statt SetKeyDelay. Außerdem wird der erste obige Hotkey durch den zweiten ersetzt, was das Tastatur-Auto-Repeat daran hindert, wiederholte Mausklicks zu produzieren:
*RCtrl::
SetMouseDelay -1
if not GetKeyState("RButton") ; Sprich: die rechte Maustaste ist noch nicht gedrückt.
Send {Blind}{RButton DownTemp}
return

Beachten Sie, dass der zweite Parameter von SetKeyDelay (Drück-Dauer) in den obigen Hotkeys entfällt. Das liegt daran, dass die Drück-Dauer nicht bei Zustandswechsel-Ereignissen angewendet wird, wie z. B. {b down} und {b up}. Allerdings gilt sie für Zustandswechsel der Shift/Strg/Alt/Win-Tasten, welche Umbelegungen wie z.B. a::B oder a::^b beeinflussen. Dementsprechend gilt eine im Auto-Execute-Bereich angegebene Drückdauer für alle solche Umbelegungen.

Ein Tastenpaar kann zwar nicht direkt in eine einzelne Taste umbelegt werden (z.B. ist a & c::b ungültig), dieser Effekt lässt sich aber durch explizites Hinzufügen der Up- und Down-Hotkeys aus dem obigen Beispiel erreichen: Ersetzen Sie einfach *a:: durch a & c:: und *a up:: durch a & c up::.

Weil Umbelegungen - wie oben beschrieben - in Hotkeys umgewandelt werden, wirkt sich der Suspend-Befehl auf sie aus. Gleichermaßen kann der Hotkey-Befehl eine Umbelegung sperren oder ändern. Zum Beispiel sperren die folgenden beiden Befehle die Umbelegung a::b.

Hotkey, *a, off
Hotkey, *a up, off

Alt-Tab-Fragen: Wenn Sie eine Tastatur- oder Maustaste in eine Alt-Taste umbelegen, wird mit dieser Taste Alt-Tab wahrscheinlich nicht funktionieren. Dies lässt sich unter anderem durch Hinzufügen des Hotkeys *Tab::Send {Blind}{Tab} umgehen - aber seien Sie sich bewusst, dass er voraussichtlich die Verwendung der echten Alt-Taste für Alt-Tab beeinflusst. Er sollte daher nur eingesetzt werden, wenn Sie Alt-Tab nur durch umbelegte Tasten und/oder Alt-Tab-Hotkeys erzeugen.

Neben den Tasten in der Tasten-Liste kann die Original-Taste auch eine virtuelle Taste (VKnn) oder ein Scan-Code (SCnnn) sein, siehe Spezial-Tasten. Dasselbe gilt für die Ziel-Taste, außer dass sie optional einen Scan-Code nach der virtuellen Taste angeben kann. sc01e::vk42sc030 ist beispielsweise auf den meisten Tastaturen äquivalent zu a::b.

Um eine Taste zu sperren statt sie umzubelegen, machen Sie daraus den Hotkey Return. F1::Return würde z. B. die Taste F1 sperren.

Die folgenden Tasten werden vom Remapping nicht unterstützt:

Maus-Zeiger per Tastatur bewegen

Wie sich mit der Tastatur der Maus-Zeiger bewegen lässt, zeigt das voll funktionsfähige Keyboard-To-Mouse-Skript. Weil das Skript flüssige Zeigerbewegungen, Beschleunigung und andere Features bietet, ist dieser Ansatz zu empfehlen, wenn Sie viele Mausbewegungen mit der Tastatur planen. Das folgende Beispiel ist dagegen eine einfache Demonstration:

*#up::MouseMove, 0, -10, 0, R ; Win+UpArrow Hotkey => Zeiger nach oben bewegen
*#Down::MouseMove, 0, 10, 0, R ; Win+DownArrow => Zeiger nach unten bewegen
*#Left::MouseMove, -10, 0, 0, R ; Win+LeftArrow => Zeiger nach links bewegen
*#Right::MouseMove, 10, 0, 0, R ; Win+RightArrow => Zeiger nach rechts bewegen
*<#RCtrl:: ; LeftWin + RightControl => Links-Klick (für Strg-Klick oder Shift-Klick Strg oder Shift gedrückt halten).
SendEvent {Blind}{LButton down}
KeyWait RCtrl ; Verhindert, dass durch Auto-Repeat Maus-Klicks wiederholt werden.
SendEvent {Blind}{LButton up}
return
*<#AppsKey:: ; LeftWin + AppsKey => Rechts-Klick
SendEvent {Blind}{RButton down}
KeyWait AppsKey ; Verhindert, dass durch Auto-Repeat Maus-Klicks wiederholt werden.
SendEvent {Blind}{RButton up}
return

Umbelegung per "Scan-Code-Tabelle" der Registry

Vorteile:

Nachteile:Wie man die Registry ändert: Es gibt mindestens zwei Methoden, Tasten per Registry umzubelegen:
  1. Verwenden Sie zur sichtbaren Umbelegung Ihrer Tasten ein Programm wie KeyTweak (Freeware); es ändert für Sie die Registry.
  2. Belegen Sie Ihre Tasten manuell um, indem Sie eine .reg-Datei (Klartext) erstellen und sie in die Registry laden. Dies wird auf www.autohotkey.com/forum/post-56216.html#56216 gezeigt.

Remapping-Methode für Windows 95/98/Me

Es ist die Verwendung von Send und KeyWait zu empfehlen. Zum Beispiel macht der folgende Hotkey das "a" zur linken Pfeil-Taste:

a::
Send {Left down} ; Linke Pfeil-Taste gedrückt halten.
KeyWait a ; Auf das Loslassen der Taste warten.
Send {Left up} ; Linke Pfeil-Taste loslassen.
return

Ähnliche Themen

Tasten-Liste
GetKeyState
Joystick umbelegen