[R] Boucles dans une boucle.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

[R] Boucles dans une boucle.

#1

Message par JOols »

Bonsoir, j'ai un petit soucis technique... je pense qu'il est possible de le régler mais je n'arrive pas à trouver de documentation précise sur ce point...
Voici le problème, j'ai pour le moment 3 Boucles

Code : Tout sélectionner

WinWaitActive("Sans titre - Bloc-notes") 

Global $demarrer

HotKeySet("{INS}", "StartLoop"); Home démarre la boucle
HotKeySet("{DEL}", "QuitLoop"); End met fin à la boucle
HotKeySet("{ECHAP}", "_Quit"); Delete termine le script


While 1

If $demarrer = 1 Then ; Démarre la boucle 

Send("0"); 
Sleep(3000); 

EndIf

WEnd



Func StartLoop()
    $demarrer = 1 ; 
EndFunc   ;==>démarre la boucle

Func QuitLoop()
    $demarrer = 0 ; 
EndFunc   ;==>quitte la boucle

Func _Quit()
    Exit
EndFunc   ;==>_Quitte le script

Code : Tout sélectionner

WinWaitActive("Sans titre - Bloc-notes") 

Global $demarrer

HotKeySet("{HOME}", "StartLoop"); Home démarre la boucle
HotKeySet("{END}", "QuitLoop"); End met fin à la boucle
HotKeySet("{ECHAP}", "_Quit"); Delete termine le script


While 1

If $demarrer = 1 Then ; Démarre la boucle 

Send("1"); 
Sleep(3000); 

Send("3"); 
Sleep(3000); 

Send("5"); 
Sleep(3000); 

Send("7"); 
Sleep(3000); 

Send("9"); 
Sleep(3000); 


EndIf

WEnd



Func StartLoop()
    $demarrer = 1 ; 
EndFunc   ;==>démarre la boucle

Func QuitLoop()
    $demarrer = 0 ; 
EndFunc   ;==>quitte la boucle

Func _Quit()
    Exit
EndFunc   ;==>_Quitte le script
et

Code : Tout sélectionner

WinWaitActive("Sans titre - Bloc-notes") 

Global $demarrer

HotKeySet("{PGUP}", "StartLoop"); Home démarre la boucle
HotKeySet("{PGDN}", "QuitLoop"); End met fin à la boucle
HotKeySet("{ECHAP}", "_Quit"); Delete termine le script


While 1

If $demarrer = 1 Then ; Démarre la boucle 

Send("2"); 
Sleep(3000); 

Send("4"); 
Sleep(3000); 

Send("6"); 
Sleep(3000); 

Send("8"); 
Sleep(3000); 

Send("10"); 
Sleep(3000); 


EndIf

WEnd



Func StartLoop()
    $demarrer = 1 ; 
EndFunc   ;==>démarre la boucle

Func QuitLoop()
    $demarrer = 0 ; 
EndFunc   ;==>quitte la boucle

Func _Quit()
    Exit
EndFunc   ;==>_Quitte le script
Je les lance en même temps (donc 3 script autoit) pour que l'idée fonctionne totalement à savoir : si j'appuis sur INS 0 est affiché en boucle, si j'appuie sur HOME, les nombres impairs s'affichent en boucle, si j'appuie sur PGUP, les nombres pairs s'affichent en boucle...

Ce que j'aimerais arriver à faire c'est un seul et unique script qui rassemblerait ces trois boucles... en faisant en sorte par exemple qu'au démarage de la boucle en sleep, si j'appuie sur F1, ça me donne le 0 en boucle, si j'appuie sur F2 on passe aux nombre impairs et F3 aux nombre pairs... donc passer à une autre séquence de boucle, à l'appui d'une touche...
Je ne sais pas comment faire, pourriez vous m'aider?

Merci d'avance...
Modifié en dernier par JOols le jeu. 09 avr. 2009 03:02, modifié 1 fois.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Boucles dans une boucle.

#2

Message par GaRydelaMer »

Bonsoir

Un truc du genre:

Code : Tout sélectionner

Global $demarer = 0
WinWaitActive("Sans titre - Bloc-notes")

; Définition des raccourcis clavier
; Ctrl + 1, Ctrl + 2, Ctrl + 3, Ctrl + w, Ctrl + x
HotKeySet("^à", "_StartLoop0"); les 0
HotKeySet("^&", "_StartLoop1"); Les pairs
HotKeySet("^é", "_StartLoop2"); Les impairs
HotKeySet("^w", "_EndLoop"); Fin de la boucle
HotKeySet("^x", "_Quit"); Quitte le programme

; boucle infini pou246r "faire vivre" le programme
While 1
    Sleep(10)
WEnd

Func _StartLoop0()
    $demarer = 1
    _Loop(0)
EndFunc   ;==>_StartLoop0
Func _StartLoop1()
    Local $a[5] = [2, 4, 6, 8, 10]
    $demarer = 1
    _Loop($a)
EndFunc   ;==>_StartLoop1
Func _StartLoop2()
    Local $a[5] = [1, 3, 5, 7, 9]
    $demarer = 1
    _Loop($a)
EndFunc   ;==>_StartLoop2

Func _Loop($touch)
    While $demarer > 0
        Select
            Case IsArray($touch)
                For $i = 0 To UBound($touch) - 1
                    Send($touch[$i])
                    Sleep(20)
                Next
            Case Else
                Send($touch)
                Sleep(50)
        EndSelect
    WEnd
EndFunc   ;==>_Loop

Func _EndLoop()
    $demarer = 0
EndFunc   ;==>_EndLoop
Func _Quit()
    Exit
EndFunc   ;==>_Quit
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Boucles dans une boucle.

#3

Message par Tlem »

Je me suis fait coiffé sur le poteau par GaRydelaMer (j'étais occupé), mais je laisse mon message quand même car l'approche est légérement différente. ;)


Hé bien, je vous dirait de regrouper vos boucles en un seul script. :lol:

Placer vos 7 HotKeySet en début de script et créez une fonction StartLoop() et StopLoop() pour chaque boucle.

Comme ceci :
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

Re: [..] Boucles dans une boucle.

#4

Message par JOols »

Rhoooo merci beaucoup pour la réactivité, c'est génial... :D

Alors, dans le principe les deux scripts sont super bien... étant néophyte, le script De Tlem m'apparaît évidemment plus clair... donc à priori c'est celui que j'utiliserais plus volontiers pour ce que je veux faire... Néanmoins un truc qui me plaît mieux dans le script que propose Gary, c'est l'appui d'une seule touche pour arrêter chacune des trois boucles (à savoir ctrl+w) alors qu'il est impossible de le faire avec celui de Tlem...
Dans mon cas je voudrais F1 ---> Boucle 1
F2 ---> Boucle 2
F3 ---> Boucle 3
Fin ---> Arret Boucle 1, 2, 3
Y a un moyen de le faire avec ton script Tlem? car si j'assigne une seule touche aux trois boucle pour le moment, ça beugue...
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

Re: [..] Boucles dans une boucle.

#5

Message par JOols »

Oups, et autre chose, mais peut être j'en demande trop... Dans ton script Tlem, la boucle ne se termine qu'une fois arrivée à son terme... c'est a dire que par exemple si ce sont les nombres pairs qui sont en boucle, et que je l'arrête, la boucle ne s'arrête qu'après 10 et pas en cours... une solution à ce problème...? et éventuellement si on ne veut pas arrêter le script, que passer de la boucle 1 à la 2 ou 3 abandonne automatiquement celle en cours (à savoir obtenir par exemple (F3)1 3 5 7 (F2)2 4 6 (F1)0 0 0 (F2)2 4 6 8 (F3)1 3 5,... car si je fais successivement F1 F2 F3, les trois semblent se mélanger de manière bordélique... excusez moi de vous bouffer du temps, votre aide m'a déjà été bien précieuse, et je pourrais de toute manière utiliser ces exemples, qui me convienne assez bien, après c'est facultatif, même si ca ferais plus propre :wink:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Boucles dans une boucle.

#6

Message par Tlem »

A une petite imperfection près, ceci devrait correspondre à ce que vous demandez :
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

Re: [..] Boucles dans une boucle.

#7

Message par JOols »

Pour le moment je voi0s deux choses... Tout d'abord si je quitte avec "F1" l'application ne se relance pas (aide windows) d'où le fait surement que vous ayez mis "F5", ensuite les boucles s'inscrivent dans une linéarité, c'est à dire qu'elles ne recommencent pas a zéro au changement mais ça j'aime :)... J'ai rajouté au Sleep un Random car je trouve que ca manque de spontanéité ( :lol: ) avec un sleep(100)... à la place de la fonction quit j'ai mis un sleep super long... comme ça, ça m'évite le problème du shell execute avec F1... si ce n'est pas ça je ne vois pas...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Boucles dans une boucle.

#8

Message par Tlem »

J'ai ré-édité mon code pour ajouter une condition qui permet d'arrêter l'envoi des nombres au moment de l'appui sur une des touches de fonction (sinon l'ensemble des nombres était quand même envoyé).

Ensuite effectivement l'imperfection dont je parlais, était le fait que lors du changement de boucle, on ne re-part pas forcément du début de la suite de nombre.
Cela dit avec l'introduction d'une variable supplémentaire, il serait possible de forcer le comptage à partir du début.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JOols
Niveau 2
Niveau 2
Messages : 18
Enregistré le : dim. 08 mars 2009 12:04
Status : Hors ligne

Re: [..] Boucles dans une boucle.

#9

Message par JOols »

Impeccable ça, j'vais me pencher sur le script pour bien le cerner, mais franchement c'est super :D ... Problème amplement résolu! Merci pour votre aide :wink:
Répondre