Mantener pulsada la tecla "w" haciendo doble pulsacion en ella

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

Nucleorion
Posts: 24
Joined: 11 Dec 2016, 11:33

Mantener pulsada la tecla "w" haciendo doble pulsacion en ella

Post by Nucleorion » 12 Dec 2016, 05:02

Hola,

He estado intentando mantener pulsada una tecla con doble pulsación, por ejemplo la w para avanzar en los juegos sin tener que estar manteniendo la presion sobre la tecla constantemente.

Entre las muchas cosas que he probado la que mas cerca ha estado ha sido esta:

Code: Select all

Pulsada:=true

w:: ;No consigo evitar que se active la doble pulsacion al repetirse la tecla
If (A_PriorHotKey = "w" AND A_TimeSincePriorHotkey < 400) ;El ultimo valor serian los milisegundos entre pulsaciones para activar la doble pulsacion
{
   Pulsada := !Pulsada ;Si pulsada es true se pone en false y si es false se pone en true
   If Pulsada
      Send {w up}
   Else
      Send {w down}
	  ;keywait, w
   Return
}
else
	Send, w
Return
Al mantener pulsada la tecla w se activa la doble pulsacion, pensaba que poniendo ~w:: se iba a evitar eso pero tampoco

User avatar
Flipeador
Posts: 1203
Joined: 15 Nov 2014, 21:31
GitHub: Flipeador
Location: Argentina
Contact:

Re: Mantener pulsada la tecla "w" haciendo doble pulsacion en ella

Post by Flipeador » 13 Dec 2016, 10:09

Hola, diría que en casi todos (por no decir todos) los teclados no es posible mantener presionada teclas que no sean modificadoras como ALT, CTRL, SHIFT, etc, solo en juegos es distinto.

Code: Select all

~w::  ; al pulsar la tecla 'w' (el '~' impide el bloqueo de la tecla, haciendo que se envíe con normalidad)
; Si la tecla 'w' ha sido pulsada mas de una vez en menos de 200ms:
If (A_PriorHotKey = A_ThisHotkey) && (A_TimeSincePriorHotkey < 200) {
    KeyWait w  ; espera a que el usuario suelte la tecla 'w' para continuar
    While !GetKeyState("w") {  ; mientras la tecla 'w' no esté presionada
        SendInput w  ; presiona de nuevo la tecla 'w'
        Sleep 50  ; espera 50ms para continuar (con 'SetKeyDelay' puedes establecer los retrasos, pero afecta a 'Send', y no a 'SendInput')
    }
    ; Llegado a este punto, el usuario presionó la tecla 'w' por lo que el bucle 'while' de arriba ha terminado.
    KeyWait w
}
return

Nucleorion
Posts: 24
Joined: 11 Dec 2016, 11:33

Re: Mantener pulsada la tecla "w" haciendo doble pulsacion en ella

Post by Nucleorion » 22 Jan 2021, 11:59

Hola, Muchas gracias :D se me pasó

Intento de nuevo hacerlo funcionar pero no va. He intentado tambien ejecutar unas funciones de autowalk y autorun https://www.autohotkey.com/boards/viewtopic.php?f=19&t=19372&p=324558#top

Me gustaria saber lo que hace cada instrucción para poder editarlo y ajustarlo, paso a comentar las que creo que entiendo

Code: Select all

~w:: //No entiendo que hace el signo antes de la w, he encontrado algo de cambia si es de 32 o 64 bits pero creo que no va por ahi la cosa
If (A_PriorHotKey = A_ThisHotkey) && (A_TimeSincePriorHotkey < 200) { //Aqui detecta si la tecla ha sido pulsada dos veces en menos de 200 ms
	KeyWait w // Entiendo que se queda esperando a que pulsemos la w pero no entiendo porque. ¿Acaso es esta la segunda pulsación?
	While !GetKeyState("w") { //Mientras no se pulse de nuevo la w
		SendInput w // se envia la pulsación de la tecla
		Sleep 50 ;quita esta linea para mayor velocidad. //Le da mayor velocidad al detectar que volvemos a pulsar la w?
	}
	KeyWait w // No entiendo porque se queda de nuevo esperando al terminar el while
}
return
Entonces con el autorun he intentado

Code: Select all

~w::
If (A_PriorHotKey = A_ThisHotkey) && (A_TimeSincePriorHotkey < 200) {
	AutoRun() //La propia funcion de autorun ya contempla que al pulsar la w dejara de correr
}
return
Pero no me funciona

User avatar
Flipeador
Posts: 1203
Joined: 15 Nov 2014, 21:31
GitHub: Flipeador
Location: Argentina
Contact:

Re: Mantener pulsada la tecla "w" haciendo doble pulsacion en ella

Post by Flipeador » 27 Jan 2021, 08:05

@Nucleorion Hola, he añadido comentarios al script de arriba.
Con respecto al AutoWalk, no he revisado el código, pero cuando se trata de juegos debes ejecutar siempre los scripts como Administrador. En el tema que has puesto, en los comentarios casi al final hay otro script, podrías probar ese, creo que solo tienes que cambiar la tecla para iniciarlo, o sea AppsKey por $w.

Nucleorion
Posts: 24
Joined: 11 Dec 2016, 11:33

Re: Mantener pulsada la tecla "w" haciendo doble pulsacion en ella

Post by Nucleorion » 19 Apr 2021, 03:27

Gracias por comentar el codigo! No me llegaba el correo con el aviso de respuesta y no la habia visto.
Volveremos a la carga con la doble pulsación
Un saludo.

Post Reply

Return to “Pedir Ayuda”