Comment autofumer F dans Autohotkey?

La barre de Dowsing vous oblige à faire des courriers indésirables ( F ) tout en recherchant des pointes de flèche profondes. Spamming keys suce. Vous n'auriez pas vraiment besoin si le son était suffisant pour continuer (la version PS2 a fait fonctionner votre contrôleur lorsqu'il est en position), mais il s'avère que ce n'est pas le cas.

AutoHotKey devrait pouvoir le rendre beaucoup plus facile sur mes doigts. Quelque chose comme ceci devrait suffire:

$f:: While GetKeyState("f","P") Send f return 

Il fonctionne dans tous les endroits, mais Psychonauts. J'ai essayé le SendPlay , SendInput , SendMode Play , les solutions de SetKeyDelay suggérées ici en vain.

Comment puis-je faire une recherche avec les tiges de transmission moins ennuyeuses?

J'ai essayé une approche différente avec la fonction de "prise de vue automatique" que JoyToKey offre, mais le problème semble être dans Psychonauts lui-même. Alors qu'il enregistre les clés relogées via JoyToKey, cela n'accepte pas les entrées répétées sans enregistrer la sortie du bouton que vous avez appuyé.

Cela m'a conduit à l'idée d'envoyer des événements d'entrée brute, qui fonctionnent. Dans cet exemple AHK, j'ai simplement assigné le raccourci CTRL-r pour faire Raz sauter 20 fois.

 ^r:: Loop 20 { Send {Space down} Sleep 10 Send {Space up} Sleep 1000 } return 

Devrait travailler avec n'importe quelle autre clé aussi.

J'ai finalement réussi à le faire fonctionner

 loop { ^#f:: If getkeystate("f") send {f up} else loop { send {f down} sleep 20 send {f up} sleep 20 if getkeystate("f") break } return } 

J'ai la version Mac de Psychonauts, donc j'ai utilisé Sikuli comme moteur de script, qui fonctionne sur Windows et Mac. Sikuli utilise Python comme langue de script.

Ce script presse F toutes les 0.12 secondes jusqu'à 30 secondes ou vous arrêtez le script avec C. Vous pouvez le configurer en modifiant les valeurs des constantes en haut.

 # Psychonauts: repeat F to collect deep arrowheads APP_NAME = "Psychonauts" KEY_TO_MASH = "f" TIME_TO_RUN = 30*1 + 00 TIME_OF_PRESS = 0.02 TIME_OF_WAIT = 0.10 def holdKeyForTime(key, time): keyDown(key) wait(time) keyUp(key) def mainAction(): time_to_run = TIME_TO_RUN time_of_press = TIME_OF_PRESS time_of_wait = TIME_OF_WAIT time_per_press = time_of_press + time_of_wait num_presses = time_to_run / time_per_press for i in range(num_presses): holdKeyForTime(KEY_TO_MASH, time_of_press) wait(time_of_wait) App.focus(APP_NAME); wait(1) mainAction() # full docs: http://doc.sikuli.org/ 
 ^1:: SetTimer, AUTOFIRE, 10 Gosub, AUTOFIRE return ^2:: SetTimer, AUTOFIRE, Off return AUTOFIRE: Send, F return