Joystick auf Tastatur oder Maus übertragen

Inhaltsverzeichnis

Wichtige Hinweise

Mit Joystick-Tasten Tastendrücke oder Mausklicks senden

Unterschiedliche Vorgehensweisen

Nachfolgend werden drei Ansätze beschrieben, von einfach bis zu komplex. Die komplexeste Methode funktioniert in den unterschiedlichsten Bereichen (z. B. Videospiele, bei denen eine Taste oder Maustaste gedrückt gehalten werden muss).

Methode #1

Diese Methode sendet einfache Tastendrücke und Mausklicks. Zum Beispiel:

Joy1::Send {Left}  ; Mit Taste #1 einen NACH-LINKS-Tastendruck senden.
Joy2::Click  ; Mit Taste #2 einen Linksklick senden.
Joy3::Send a{Esc}{Space}{Enter}  ; Mit Taste #3 den Buchstaben "a", gefolgt von Escape, Leerzeichen und Enter, senden.
Joy4::Send Mit freundlichen Grüßen,{Enter}Max Mustermann  ; Mit Taste #4 eine zweizeilige Signatur senden.

Um eine Taste mehr als einen Befehl senden zu lassen, setzen Sie den ersten Befehl unterhalb des Tastennamens und machen Sie den letzten Befehl zu einem Return. Zum Beispiel:

Joy5::
Run Notepad
WinWait Unbenannt - Editor
WinActivate
Send Dieser Text wird im Texteditor erscheinen.{Enter}
return

In der Tastenliste finden Sie alle Tastatur-, Maus- und Joystick-Tasten.

Methode #2

Diese Methode ist dort notwendig, wo eine Taste oder Maustaste gedrückt gehalten werden muss, während Sie eine Joystick-Taste gedrückt halten. Das folgende Beispiel macht die zweite Taste des Joysticks zur linken Pfeiltaste:

Joy2::
Send {Left down}  ; Hält die linke Pfeiltaste gedrückt.
KeyWait Joy2  ; Wartet, bis der Benutzer die Joystick-Taste loslässt.
Send {Left up}  ; Lässt die linke Pfeiltaste los.
return

Methode #3

Diese Methode ist dort notwendig, wo Sie mehr als einen Joystick-Hotkey wie den von Methode #2 haben, und wo Sie solche Hotkeys manchmal gleichzeitig drücken und loslassen. Das folgende Beispiel macht die dritte Taste des Joysticks zur linken Maustaste:

Joy3::
Send {LButton down}   ; Hält die linke Maustaste gedrückt.
SetTimer, AufDritteTasteWarten, 10
return

AufDritteTasteWarten:
if GetKeyState("Joy3")  ; Die Taste ist noch unten, also weiter warten.
    return
; Ansonsten wurde die Taste losgelassen.
Send {LButton up}  ; Lässt die linke Maustaste los.
SetTimer, AufDritteTasteWarten, Off
return

Tastendrücke wiederholt senden

Bei einigen Programmen oder Videospielen kann es erforderlich sein, dass eine Taste wiederholt gesendet werden muss (als würden Sie die Taste auf der Tastatur gedrückt halten). Das folgende Beispiel zeigt, wie man dies erreichen kann. Es sendet wiederholt Leertastendrücke, während Sie die zweite Taste des Joysticks gedrückt halten:

Joy2::
Send {Space down}   ; Drückt die Leertaste nach unten.
SetTimer, AufJoy2Warten, 30  ; Reduzieren Sie die Nummer 30 auf 20 oder 10, um Tasten schneller zu senden. Erhöhen Sie die Nummer, um Tasten langsamer zu senden.
return

AufJoy2Warten:
if not GetKeyState("Joy2")  ; Die Taste wurde losgelassen.
{
    Send {Space up}  ; Lässt die Leertaste los.
    SetTimer, AufJoy2Warten, Off  ; Stoppt die Überwachung der Taste.
    return
}
; Da oben kein "Return" erfolgt ist, wird die Taste noch gedrückt gehalten.
Send {Space down}  ; Sendet einen weiteren Leertastendruck.
return

Kontextabhängige Joystick-Tasten

Die Direktiven #IfWinActive/Exist können genutzt werden, um bestimmte Joystick-Tasten je nach Typ des aktiven oder vorhandenen Fensters unterschiedliche (oder gar keine) Aktionen durchzuführen zu lassen.

Joystick als Maus verwenden

Das Joystick-zu-Maus-Skript wandelt ein Joystick durch Neubelegung der Tasten und Achsen-Steuerung in eine Maus um.

Mit anderen Joystick-Bedienelementen Tastendrücke oder Mausklicks senden

Um ein Skript auf die Bewegung einer Joystick-Achse oder des Rundblickschalters reagieren zu lassen, verwenden Sie SetTimer und GetKeyState.

Joystick-Achsen

Das folgende Beispiel bringt die X- und Y-Achsen des Joysticks dazu, sich wie die Pfeiltasten auf einer Tastatur zu verhalten (links, rechts, oben und unten):

#Persistent  ; Hält das Skript aufrecht, bis der Benutzer es explizit beendet.
SetTimer, Achsenüberwachung, 5
return

Achsenüberwachung:
JoyX := GetKeyState("JoyX")  ; Ermittelt die Position der X-Achse.
JoyY := GetKeyState("JoyY")  ; Ermittelt die Position der Y-Achse.
VorherGedrückteTaste := GedrückteTaste  ; VorherGedrückteTaste enthält nun die Taste, die vorher unten war (falls vorhanden).

if (JoyX > 70)
    GedrückteTaste := "Right"
else if (JoyX < 30)
    GedrückteTaste := "Left"
else if (JoyY > 70)
    GedrückteTaste := "Down"
else if (JoyY < 30)
    GedrückteTaste := "Up"
else
    GedrückteTaste := ""

if (GedrückteTaste = VorherGedrückteTaste)  ; Die korrekte Taste ist bereits unten (oder keine Taste notwendig).
    return  ; Nichts tun.

; Ansonsten vorherige Taste loslassen und neue Taste drücken:
SetKeyDelay -1  ; Verhindert Verzögerungen zwischen den Tastendrücken.
if VorherGedrückteTaste   ; Es gibt eine vorherige Taste zum Loslassen.
    Send, {%VorherGedrückteTaste% up}  ; Lässt sie los.
if GedrückteTaste   ; Es gibt eine Taste zum nach unten Drücken.
    Send, {%GedrückteTaste% down}  ; Drückt sie nach unten.
return

Joystick-Rundblickschalter

Das folgende Beispiel bewirkt, dass der Rundblickschalter des Joysticks wie der Pfeiltastenblock auf einer Tastatur fungiert; das heißt, dass der Rundblickschalter Pfeiltastendrücke senden wird (links, rechts, oben und unten):

#Persistent  ; Hält das Skript aufrecht, bis der Benutzer es explizit beendet.
SetTimer, POVÜberwachung, 5
return

POVÜberwachung:
POV := GetKeyState("JoyPOV")  ; Ermittelt die Position des Rundblickschalters.
VorherGedrückteTaste := GedrückteTaste  ; VorherGedrückteTaste enthält nun die Taste, die vorher unten war (falls vorhanden).

; Einige Joysticks haben eventuell einen Rundblickschalter, der keine vordefinierten Richtungen aufweist.
; In diesem Fall können Bereiche verwendet werden:
if (POV < 0)   ; Kein Winkel zu melden
    GedrückteTaste := ""
else if (POV > 31500)               ; 315 bis 360 Grad: Nach vorne gerichtet
    GedrückteTaste := "Up"
else if POV between 0 and 4500      ; 0 bis 45 Grad: Nach vorne gerichtet
    GedrückteTaste := "Up"
else if POV between 4501 and 13500  ; 45 bis 135 Grad: Nach rechts gerichtet
    GedrückteTaste := "Right"
else if POV between 13501 and 22500 ; 135 bis 225 Grad: Nach hinten gerichtet
    GedrückteTaste := "Down"
else                                ; 225 bis 315 Grad: Nach links gerichtet
    GedrückteTaste := "Left"

if (GedrückteTaste = VorherGedrückteTaste)  ; Die korrekte Taste ist bereits unten (oder keine Taste notwendig).
    return  ; Nichts tun.

; Ansonsten vorherige Taste loslassen und neue Taste drücken:
SetKeyDelay -1  ; Verhindert Verzögerungen zwischen den Tastendrücken.
if VorherGedrückteTaste   ; Es gibt eine vorherige Taste zum Loslassen.
    Send, {%VorherGedrückteTaste% up}  ; Lässt sie los.
if GedrückteTaste   ; Es gibt eine Taste zum nach unten Drücken.
    Send, {%GedrückteTaste% down}  ; Drückt sie nach unten.
return

Tastendrücke wiederholt senden

Die beiden oberen Beispiele können so geändert werden, dass sie die Taste wiederholend senden, anstatt sie lediglich gedrückt zu halten (das heißt, um das physische Gedrückthalten einer Taste nachahmen zu können). Ersetzen Sie dazu die folgende Zeile:

return  ; Nichts tun.

Mit Folgendes:

{
    if GedrückteTaste
        Send, {%GedrückteTaste% down}  ; Tastendrücke wiederholt senden.
    return
}

Bemerkungen

Um anstelle des ersten Joysticks einen anderen Joystick zu verwenden, muss vor dem Namen der Taste oder Achse die Joystick-Nummer erfolgen. Zum Beispiel wäre 2Joy1 die erste Taste des zweiten Joysticks.

Im AutoHotkey-Forum können Sie weitere nützliche Joystick-Skripte finden. Schlüsselwörter wie Joystick and GetKeyState and Send sind wahrscheinlich notwendig, um Themen zu finden, die von Interesse sind.