autohotkeyahk | eine Maustaste gedrückt halten, um eine andere Taste zu halten?

727
fohrums
win10_v1803.17134.345_home autohotkeyahk_v1.1.30.00 

Wie halte ich w gedrückt, wenn Sie XButton1 auf Logitech G502 mit AutoHotKey halten? Das Problem ist, wenn Sie die Taste mit dem unten stehenden Skript halten, wird nur eine einzelne Ausgabe gesendet, und es wird kein typisches Windows-Verhalten erzeugt, das sie wirklich hält ( siehe zum Beispiel unten ). Denken Sie daran, dass dies nur aus Absicht geschieht, um fps-Spiele zu spielen, aber global neu zuzuordnen ist viel einfacher als das Hinzufügen jedes Spiels, das ich so zufällig spiele, um die Steuerknöpfe des LogitechG502 zu ändern.

Ich finde es cool, sich im Spiel vorwärts zu bewegen und heiße Cheetos mit der anderen Hand zu greifen

PROBLEM

  • Ich habe keine Möglichkeit, XButton1meine LogitechG502 neu zuzuordnen, um das Halten zu replizierenw
    • Der Befehl ahk-while funktioniert zwar, verhält sich aber nicht richtig und fungiert als Pressemitteilung, auch wenn er mit ahk-sleep langsamer wird
    • Im Folgenden finden Sie eine Lösung zum Einrichten mehrerer ahk-Befehle, mit denen der XButton1 von LogitechG502 auf w umgestellt wird, um sich während des Spiels vorwärts zu bewegen

LÖSUNG

  • Dieser vorausgesetzte Code verhält sich ordnungsgemäß, muss jedoch gemäß definiert werden gametitle( nur wenn es eine Möglichkeit gab, ihn global neu zuzuordnen ). Nicht nur das, aber es funktioniert nicht für alle Spiele wie Killing Floor 2, da Counter-Strike Global Offensive csgo bisher funktioniert.
#NoEnv #SingleInstance Force #InstallKeybdHook #InstallMouseHook #UseHook #IfWinActive Titel meines Spiels XButton1 :: w #IfWinActive

PROBE

  • funktioniert nicht: XButton1::SendInput, w ; mouse advanced button back as holding forward in-game
    • XButton1 ( w / Skript oben ) hält mich 3 Sekunden lang :w
    • Halten Sie für 3-sec, w gibt mir:wwwwwwwwwwwwwwwwwwwwwwwwww
  • worksbuttoofast:
$ XButton1 :: während GetKeyState ("XButton1", "P") Senden Sie w Rückkehr
  • repliziert das Halten nicht wrichtig, da diese Methode eine viel schnellere Wiederholung ist, auch wenn sie durch ahk-sleep verlangsamt wird
1
Unklar, was für ein Problem und welche Lösung. harrymc vor 5 Jahren 0
Das Problem ist, dass die von @ user3419297 vorgeschlagene Antwort den Job erledigt, indem Sie tatsächlich w gedrückt halten, aber es ist zu schnell und repliziert nicht richtig, wie das Fenster eine Taste gedrückt hält. fohrums vor 5 Jahren 0

2 Antworten auf die Frage

2
user3419297

Das sollte funktionieren:

; maximum number of hotkeys that can be pressed within 2 seconds (default rate of hotkey activations) ; without triggering a warning dialog: #MaxHotkeysPerInterval 10000  $XButton1:: while GetKeyState("XButton1", "P") { Send w Sleep 20 ; ms or more if you want to reduce the frequency of the send command  } return 

Ungetestet.

https://autohotkey.com/docs/commands/While.htm

https://autohotkey.com/docs/commands/_MaxHotkeysPerInterval.htm

Getestete Arbeit, aber es ist wirklich schnell und das Ersetzen von "Send" in "SendInput" ist noch schneller. Es ist nicht dasselbe Verhalten wie "w" zu halten. Ich verstehe auch nicht den Grund für die Raute-Linie mit dem Intervall "10000". fohrums vor 5 Jahren 0
Sie können die Häufigkeit des Sendebefehls innerhalb der Schleife reduzieren, indem Sie einen Ruhezustand (Zeit vor dem Wiederholen des Sendebefehls) hinzufügen. Siehe die bearbeitete Antwort. user3419297 vor 5 Jahren 0
Das hilft zwar, schnell zu sein, aber wenn ich es im Spiel teste, bekomme ich die Action-Stop-Move-Forward-Stop-Action. ** Es ist nicht die richtige Art von Verhalten ** Ich suche. Vielleicht nicht mit dem "ahk-while", aber vielleicht eine Möglichkeit, einfach eine Taste gedrückt zu halten? fohrums vor 5 Jahren 0
2
user3419297

Versuchen Sie auch das Remapping :

#NoEnv #SingleInstance Force #InstallKeybdHook #InstallMouseHook #UseHook  #IfWinActive Title of my game  XButton1::w  #IfWinActive 

Ersetzen Sie Title of my gameden genauen Titel des Spielfensters wie in Window Spy gezeigt.

https://autohotkey.com/docs/commands/_IfWinActive.htm

BEARBEITEN:

Sie können die # If- oder # IfWinActive- Direktive verwenden, um kontextsensitive Hotkeys für mehrere Anwendungen / Fenster zu erstellen:

#If WinActive("Title of my game1") || WinActive("Title of my game2") ; "||" means "OR"  XButton1::w XButton2::x  #If WinActive("Title of my game3")   XButton1::a XButton2::b  #If ; turn off context sensitivity  ; In all other applications/windows you can make XButton1 and XButton2 to do something else, e.g.:  XButton1:: Send ^c ; copy XButton2:: Send ^v ; paste 

https://autohotkey.com/docs/commands/_If.htm

Das funktioniert, aber ich wollte vermeiden, den Titel des Spiels zu implementieren und für jeden `(Gametitle)` mehrere gleiche Codes zu erstellen. Die Zeilen mit dem Poundsign werden also benötigt, einschließlich der letzten Zeile "# ifwinactive"? fohrums vor 5 Jahren 0
Siehe EDIT in meiner Antwort. user3419297 vor 5 Jahren 0