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 mehr als eine Zeile ausführen zu lassen, setzen Sie die Zeilen unter den Tastennamen und umschließen Sie sie mit geschweiften Klammern. Zum Beispiel:
Joy5:: { Run "notepad" WinWait "Unbenannt - Editor" WinActivate Send "Dieser Text wird in Notepad erscheinen.{Enter}" }
Weitere Informationen finden Sie unter Wie man Hotkeys schreibt.
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. }
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 } 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 , 0 }
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. } AufJoy2Warten() { if not GetKeyState("Joy2") ; Die Taste wurde losgelassen. { Send "{Space up}" ; Die Leertaste loslassen. SetTimer , 0 ; Ü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. }
Die #HotIf-Direktive kann verwendet werden, um bestimmte Controllertasten je nach Bedingung (z.B. Typ des aktiven Fensters) unterschiedliche (oder gar keine) Aktionen 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:
SetTimer AchsenÜberwachen, 5 AchsenÜberwachen() { static TasteZumGedrückthalten := "" 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. }
Das folgende Beispiel bewirkt, dass sich der Rundblickschalter des Controllers wie die Pfeiltasten auf der Tastatur verhält:
SetTimer POVÜberwachen, 5 POVÜberwachen() { static TasteZumGedrückthalten := "" 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 >= 0 and POV <= 4500 ; 0 bis 45 Grad: Nach vorne gerichtet TasteZumGedrückthalten := "Up" else if POV >= 4501 and POV <= 13500 ; 45 bis 135 Grad: Nach rechts gerichtet TasteZumGedrückthalten := "Right" else if POV >= 13501 and POV <= 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. }
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.