Joy
, was für Joystick steht. In der Regel funktionieren sie aber auch für andere Gamecontroller wie Gamepads oder Lenkräder.Nachfolgend werden drei Methoden beschrieben, von einfach bis komplex. Die komplexeste Methode eignet sich für die meisten Situationen (z.B. wenn in einem Videospiel eine Tastatur- oder Maustaste gedrückt gehalten werden muss).
Diese Methode sendet einfache Tastendrücke und Mausklicks. Zum Beispiel:
Joy1::Send {Left} ; Taste #1 einen NACH-LINKS-Tastendruck senden lassen. Joy2::Click ; Taste #2 einen Linksklick senden lassen. Joy3::Send a{Esc}{Space}{Enter} ; Taste #3 den Buchstaben "a" gefolgt von Escape, Leerzeichen und Enter senden lassen. Joy4::Send Mit freundlichen Grüßen,{Enter}Max Mustermann ; Taste #4 eine zweizeilige Signatur senden lassen.
Um eine Taste mehrere Befehle senden zu lassen, setzen Sie den ersten Befehl unter den Tastennamen und machen Sie den letzten Befehl zu einem Return. Zum Beispiel:
Joy5:: Run Notepad WinWait Unbenannt - Editor WinActivate Send Dieser Text wird in Notepad erscheinen.{Enter} return
In der Tastenliste finden Sie alle Tastatur-, Maus- und Controllertasten.
Diese Methode wird benötigt, wenn eine Tastatur- oder Maustaste während der gesamten Zeit, in der Sie eine Controllertaste gedrückt halten, gedrückt gehalten werden muss. Das folgende Beispiel bewirkt, dass sich die zweite Taste des Controllers wie die linke Pfeiltaste verhält:
Joy2:: Send {Left down} ; Die linke Pfeiltaste gedrückt halten. KeyWait Joy2 ; Warten, bis der Benutzer die Controllertaste loslässt. Send {Left up} ; Die linke Pfeiltaste loslassen. return
Diese Methode wird benötigt, wenn Sie mehr als einen Controller-Hotkey wie den von Methode #2 haben und Sie diese Hotkeys manchmal gleichzeitig drücken und loslassen. Das folgende Beispiel bewirkt, dass sich die dritte Taste des Controllers wie die linke Maustaste verhält:
Joy3:: Send {LButton down} ; Die linke Maustaste gedrückt halten. SetTimer, AufDritteTasteWarten, 10 return AufDritteTasteWarten: if GetKeyState("Joy3") ; Die Taste ist noch unten, also weiter warten. return ; Andernfalls wurde die Taste losgelassen. Send {LButton up} ; Die linke Maustaste loslassen. SetTimer, AufDritteTasteWarten, Off return
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 macht dies möglich, indem es wiederholt Leertastendrücke sendet, während Sie die zweite Taste des Controllers gedrückt halten:
Joy2:: Send {Space down} ; Die Leertaste gedrückt halten. SetTimer, AufJoy2Warten, 30 ; Verringern Sie die Zahl 30 auf 20 oder 10, um Tasten schneller zu senden. Erhöhen Sie sie, um Tasten langsamer zu senden. return AufJoy2Warten: if not GetKeyState("Joy2") ; Die Taste wurde losgelassen. { Send {Space up} ; Die Leertaste loslassen. SetTimer, AufJoy2Warten, Off ; Überwachung der Taste stoppen. return } ; Da oben kein "Return" erfolgt ist, wird die Taste weiter gedrückt gehalten. Send {Space down} ; Einen weiteren Leertastendruck senden. return
Die Direktiven #IfWinActive/Exist können verwendet werden, um bestimmte Controllertasten je nach aktivem oder existierendem Fenster eine andere (oder gar keine) Aktion ausführen zu lassen.
Das Controller-zu-Maus-Skript wandelt einen Controller durch Neubelegung der Tasten und Achsen in eine Maus um.
Um ein Skript auf die Bewegung einer Achse oder des Rundblickschalters des Sticks reagieren zu lassen, verwenden Sie SetTimer in Verbindung mit GetKeyState.
Das folgende Beispiel bewirkt, dass sich die X- und Y-Achse des Sticks wie die Pfeiltasten auf der Tastatur verhalten:
#Persistent ; Skript laufen lassen, bis der Benutzer es explizit beendet. SetTimer, AchsenÜberwachen, 5 return AchsenÜberwachen: JoyX := GetKeyState("JoyX") ; Position der X-Achse abrufen. JoyY := GetKeyState("JoyY") ; Position der Y-Achse abrufen. TasteZumGedrückthaltenVorher := TasteZumGedrückthalten ; Vorher enthält nun die Taste, die vorher gedrückt gehalten wurde (falls vorhanden). if (JoyX > 70) TasteZumGedrückthalten := "Right" else if (JoyX < 30) TasteZumGedrückthalten := "Left" else if (JoyY > 70) TasteZumGedrückthalten := "Down" else if (JoyY < 30) TasteZumGedrückthalten := "Up" else TasteZumGedrückthalten := "" if (TasteZumGedrückthalten = TasteZumGedrückthaltenVorher) ; Die korrekte Taste ist bereits unten (oder keine Taste notwendig). return ; Nichts tun. ; Andernfalls vorherige Taste loslassen und neue Taste gedrückt halten: SetKeyDelay -1 ; Verzögerungen zwischen Tastendrücke verhindern. if TasteZumGedrückthaltenVorher ; Es gibt eine vorherige Taste zum Loslassen. Send, {%TasteZumGedrückthaltenVorher% up} ; Taste loslassen. if TasteZumGedrückthalten ; Es gibt eine Taste zum Gedrückthalten. Send, {%TasteZumGedrückthalten% down} ; Taste gedrückt halten. return
Das folgende Beispiel bewirkt, dass sich der Rundblickschalter des Controllers wie die Pfeiltasten auf der Tastatur verhält:
#Persistent ; Skript laufen lassen, bis der Benutzer es explizit beendet. SetTimer, POVÜberwachen, 5 return POVÜberwachen: POV := GetKeyState("JoyPOV") ; Position des Rundblickschalters abrufen. TasteZumGedrückthaltenVorher := TasteZumGedrückthalten ; Vorher enthält nun die Taste, die vorher gedrückt gehalten wurde (falls vorhanden). ; Einige Controller können einen stufenlosen/genauen Rundblickschalter haben, anstatt einen mit vordefinierten Richtungen. ; In diesem Fall können Bereiche verwendet werden: if (POV < 0) ; Kein Winkel zu melden TasteZumGedrückthalten := "" else if (POV > 31500) ; 315 bis 360 Grad: Nach vorne gerichtet TasteZumGedrückthalten := "Up" else if POV between 0 and 4500 ; 0 bis 45 Grad: Nach vorne gerichtet TasteZumGedrückthalten := "Up" else if POV between 4501 and 13500 ; 45 bis 135 Grad: Nach rechts gerichtet TasteZumGedrückthalten := "Right" else if POV between 13501 and 22500 ; 135 bis 225 Grad: Nach hinten gerichtet TasteZumGedrückthalten := "Down" else ; 225 bis 315 Grad: Nach links gerichtet TasteZumGedrückthalten := "Left" if (TasteZumGedrückthalten = TasteZumGedrückthaltenVorher) ; Die korrekte Taste ist bereits unten (oder keine Taste notwendig). return ; Nichts tun. ; Andernfalls vorherige Taste loslassen und neue Taste gedrückt halten: SetKeyDelay -1 ; Verzögerungen zwischen Tastendrücke verhindern. if TasteZumGedrückthaltenVorher ; Es gibt eine vorherige Taste zum Loslassen. Send, {%TasteZumGedrückthaltenVorher% up} ; Taste loslassen. if TasteZumGedrückthalten ; Es gibt eine Taste zum Gedrückthalten. Send, {%TasteZumGedrückthalten% down} ; Taste gedrückt halten. return
Die beiden obigen Beispiele können so modifiziert werden, dass die Taste wiederholt gesendet wird, anstatt sie nur gedrückt zu halten, d.h. um das physische Gedrückthalten einer Tastaturtaste zu imitieren. Ersetzen Sie dazu die folgende Zeile:
return ; Nichts tun.
Mit den folgenden Zeilen:
{ if TasteZumGedrückthalten Send, {%TasteZumGedrückthalten% down} ; Tastendruck wiederholt senden. return }
Um einen anderen Controller als den ersten zu verwenden, stellen Sie dem Namen der Taste oder Achse die Nummer des Controllers voran. Zum Beispiel wäre 2Joy1
die erste Taste des zweiten Controllers.
Weitere nützliche Controllerskripte finden Sie im AutoHotkey-Forum. Verwenden Sie Suchbegriffe wie Controller and GetKeyState and Send, um relevante Themen zu finden.