déclencher timer en repétition y mettre fin Topic is solved

Poser vos questions de programmation en AutoHotkey
Francis1211

déclencher timer en repétition y mettre fin

10 Nov 2020, 07:00

Bonjour à tous
Je m y connais pas et j ai besoin de faire un AHK
Mon script en bas

Des que j appuie sur e
Q se maintient durant 5 sec
S se déclenche au bout de 2.5 sec puis se maintient durant 2.5sec
Au bout de 5 sec Q et S sont relachés

schémas
e::
KEY Q
pendant 5sec
QQQQQQQQQ

KEY S
attente pendant 2.5sec
----2.5sec------ => ssssssssssssss

relachement des touches Q , S

Voici mon début mais ce n est pas au point
j aurais besoin d aide s il vous plait
Un Grand Merci à vous

Code: Select all

e:: 
;;;; DEBUTQ

RepeatKey := !RepeatKey

If RepeatKey
SetTimer, SendTheKey, 10 , 

Else
SetTimer, SendTheKey, Off
Return

Return

SendTheKey:
SendInput q

Return
;;;;; FINQ  comment y mettre fin au bout de 5 sec ?

;Début S

SendEactive := !SendEactive

If SendEactive
	SetTimer SendE, 2500
                                    ;;;; Je n'arrive pas a déclencher un repeat en timer2.5sec et y mettre fin au bout de 5sec
Else
	SetTimer SendE, Off
Return

SendE: ;spams key 
	Send, s


Return
;;;; ;FIN S
[Mod edit: [code][/code] tags added.]
User avatar
joedf
Posts: 7796
Joined: 29 Sep 2013, 17:08
Facebook: J0EDF
Google: +joedf
GitHub: joedf
Location: Canada
Contact:

Re: déclencher timer en repétition y mettre fin  Topic is solved

10 Nov 2020, 10:03

je pense qu'on peut simplifier de cette façon:

Code: Select all

e::
	SendInput, {Q down} ; maintenir Q
	Sleep, 2500 ; attendre un peu, 2.5s = 2500 ms
	SendInput, {S down} ; maintenir S
	Sleep, 2500 ;  attendre un autre 2.5s, total de 5s
	SendInput, {Q up} ; relâcher Q
	SendInput, {S up} ; relâcher S
return
J’espère que ça satisfait tes besoin. :thumbup:
Francis121
Posts: 3
Joined: 10 Nov 2020, 05:06

Re: déclencher timer en repétition y mettre fin

13 Nov 2020, 05:58

Merci pour votre aide j apprécie.
Seulement il manquerait la notion de repétition ou de délai de pression sur la touche.
D autant plus, je viens d apprendre que les loop simultanées n existent pas car ahk calcule les taches une par une...
Auriez vous déja utilisé un time qui maintien la pression en Milliseconde ?
Et non pas sur le nombre de caracteres..
Faut il passer par un mélange de Repeat et de loop ?
Pour obtenir ceci .
2.5sec de pression
qqqqqqq
puis sans interruption tout de suite 2.5 seconde de pression
qsqsqsqsqsqs
Fin

exemple

Code: Select all

e:: 
RepeatKey := !RepeatKey

If RepeatKey
SetTimer, SendTheKey, 10 , 

Else
SetTimer, SendTheKey, Off
Return

Return

SendTheKey:
SendInput qs
[Mod edit: [code][/code] tags added.]
*****************************
Je regarde mais cela devient compliqué mais je cherche toujours.
comment l'arreter au bout de 2.5 sec? Merci bien grandement à vous
User avatar
joedf
Posts: 7796
Joined: 29 Sep 2013, 17:08
Facebook: J0EDF
Google: +joedf
GitHub: joedf
Location: Canada
Contact:

Re: déclencher timer en repétition y mettre fin

13 Nov 2020, 09:22

Qqch comme ça? :ugeek:
j'ai compressée / simplifiée la première section.

Code: Select all

; aide pour Francis121 
; https://www.autohotkey.com/boards/viewtopic.php?p=363950#p363950
; par joedf

maxTime := 2500 ;ms

e::
	RepeatTick := A_TickCount
	SetTimer, SendTheKey, % (RepeatKey := !RepeatKey) ? 10 : "Off"
Return


SendTheKey:
	SendInput qs
	
	delta := A_TickCount - RepeatTick
	if (delta > maxTime)
	{
		SetTimer, %A_ThisLabel%, Off
		RepeatKey := false
	}
return
Francis121
Posts: 3
Joined: 10 Nov 2020, 05:06

Re: déclencher timer en repétition y mettre fin

14 Nov 2020, 17:02

Super merci énormément pour votre retour.
Je ne comprends pas tout mais cela me motive de l'étudier à fond.
Cette mécanique évoluée était impensable pour moi :)
Francis121
Posts: 3
Joined: 10 Nov 2020, 05:06

Re: déclencher timer en repétition y mettre fin

18 Nov 2020, 04:15

Grace à votre script Joedf et plusieurs recherches, j'ai miraculeusement réussi à enchainer celui-ci
( je n y connais rien niv 0 ) Effet espéré :
E execute 2.5 secondes de qqqqqq puis enchaine 2.5 secondes de qsqqsqs.
Pour le moment :
Le temps est hasardeux et pas calibré, pour autant la réaction en chaine se passe tres bien.
La séquence qqq est à peu pres équilibrée à la séquence qsqsqs. J en suis déja tres content.

Code: Select all

maxTime := 1250 ;ms
E::

loop
{
Sleep 1  ; Initial delay before key-repeat begins.
while A_TimeSinceThisHotkey < 2500
    Send {q down}

Sleep 1 
	RepeatTick := A_TickCount
	SetTimer, SendTheKey, % (RepeatKey := !RepeatKey) ? 10 : "Off"
Return

SendTheKey:
	SendInput qs
	
	delta := A_TickCount - RepeatTick
	if (delta > maxTime)
	{
		SetTimer, %A_ThisLabel%, Off
		RepeatKey := false
	}

return
}
return
Last edited by joedf on 18 Nov 2020, 08:52, edited 1 time in total.
Reason: added [code] tags
User avatar
joedf
Posts: 7796
Joined: 29 Sep 2013, 17:08
Facebook: J0EDF
Google: +joedf
GitHub: joedf
Location: Canada
Contact:

Re: déclencher timer en repétition y mettre fin

18 Nov 2020, 14:30

Je suis pas certain par rapport à comment Loop est utilisé ici, mais j'imagine que le suivant satisfait ce que tu demandes. :think: :thumbup:

Code: Select all

; aide pour Francis121 
; https://www.autohotkey.com/boards/viewtopic.php?p=363950#p363950
; par joedf

stepTime := 2500 ;ms
maxTime := 5000

e::
	RepeatTick := A_TickCount
	SetTimer, SendTheKey, % (RepeatKey := !RepeatKey) ? 10 : "Off"
Return


SendTheKey:
	delta := A_TickCount - RepeatTick
	
	; Envoye "q" si le temps est moins de 2500 ms (stepTime), autrement on envoye "qs"
	SendInput % (delta < stepTime) ? "q" : "qs"
	
	if (delta > maxTime)
	{
		SetTimer, %A_ThisLabel%, Off
		RepeatKey := false
	}
return

Return to “J'ai besoin d'aide”

Who is online

Users browsing this forum: No registered users and 3 guests