[..] Faire redémarrer une boucle depuis le début.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Mave
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 28 avr. 2016 22:40
Status : Hors ligne

[..] Faire redémarrer une boucle depuis le début.

#1

Message par Mave »

Bonjour. J'arrive à faire une boucle, à créer une pause, et à quitter le script si nécessaire mais je me demandais s'il y avait une fonction qui permettrait de faire redémarrer la boucle depuis le début. En script j'ai créé cela pour le moment :

Code : Tout sélectionner

#RequireAdmin
HotKeySet("{F5}", "Pause") ;La Touche qui lancera et mettra en pause.
HotKeySet("{F6}", "_Exit");La Touche qui arrêtera le script
Global $Pause=0

While 1
;Mon Script ici !
WEnd

 Func Pause()
        $Pause = BitXOR($Pause,1)
        Do
            ToolTip("Pause !",100,100);Indique La Pause
            Sleep(50)
		 Until $Pause=0
		    ToolTip("Reprise !",100,100);Indique La Reprise du Script
    EndFunc
    Func _Exit()
        Exit
    EndFunc
Merci de votre aide.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#2

Message par walkson »

Bonjour,
Si j'ai bien compris votre question, vous parlez de la boucle While (et non de celle du Do)
Par définition, une boucle a un début et une fin et se répète à l'infinie.
Pour que votre script puisse durer dans le temps, il faut une boucle (souvent While) je pense au Gui.
Je vous mets un petit exemple, vous remarquerez que la boucle vous renvoie Notepad à l'infinie et ma méthode pour sortir du script à la place d'un Exit. ConsoleWrite() vous situera dans le développement
(Si j'ai compris votre question !?!)

Code : Tout sélectionner

HotKeySet("!{F5}", "Pause") ;Alt + F5
HotKeySet("!{F6}", "_Exit");Alt + F6
Global $Pause=0, $Sortie = 0

While 1
ConsoleWrite("dans le 'While'" & @CR)
Example()
Sleep(5000)
If $Sortie = 1 Then ExitLoop
WEnd

 Func Pause()
        $Pause = BitXOR($Pause,1)
        Do
            ConsoleWrite("dans le 'Do'" & @CR)
			ToolTip("Pause !",100,100);Indique La Pause
            Sleep(1000)
       Until $Pause=0
          ToolTip("Reprise !",100,100);Indique La Reprise du Script
    EndFunc
    Func _Exit()
        $Sortie = 1
    EndFunc
Func Example()
	; Run Notepad
	Run("notepad.exe")
	Sleep(2000)
	; Wait 10 seconds for the Notepad window to appear.
	Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

	; Set the state of the Notepad window to "hide".
	WinSetState($hWnd, "", @SW_HIDE)
	ControlSend($hWnd, "", "Edit1", "This is some text " & @MIN &":"& @SEC)
	; Wait for 2 seconds.
	Sleep(2000)

	; Set the state of the Notepad window to "show".
	WinSetState($hWnd, "", @SW_SHOW)

	; Wait for 2 seconds.
	Sleep(2000)

	; Close the Notepad window using the handle returned by WinWait.
	WinKill($hWnd)
EndFunc   ;==>Example
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Mave
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 28 avr. 2016 22:40
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#3

Message par Mave »

Bonjour walkson en gros j'aimerais par exemple qu'en appuyant sur la touche F7 le script recommence depuis le début. Il ne coupe pas la boucle, mais il la fait recommencer depuis le début.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#4

Message par mikell »

faire redémarrer la boucle depuis le début
ContinueLoop le fait
Mais comme ça ne peut être utilisé que depuis l'intérieur de la boucle concernée, on pourrait imaginer quelque chose comme ça :
Global $var, HotkeySet F7 => $var=1 => If $var=1 then ContinueLoop (dans la boucle while)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Mave
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 28 avr. 2016 22:40
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#5

Message par Mave »

Bonsoir mikell, tu veux dire comme çà ? :

Code : Tout sélectionner

#RequireAdmin
HotKeySet("{F5}", "Pause") ;La Touche qui lancera et mettra en pause.
HotKeySet("{F6}", "_Exit");La Touche qui arrêtera le script
Global $Pause=0

While 1
Global $var, HotkeySet F7 => $var=1 => If $var=1 then ContinueLoop
;Mon Script ici !
WEnd

 Func Pause()
        $Pause = BitXOR($Pause,1)
        Do
            ToolTip("Pause !",100,100);Indique La Pause
            Sleep(50)
       Until $Pause=0
          ToolTip("Reprise !",100,100);Indique La Reprise du Script
    EndFunc
    Func _Exit()
        Exit
    EndFunc
P.s : Oui je suis très débutant ^^
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#6

Message par orax »

Je crois qu'il voulait dire quelque chose comme :
#RequireAdmin
Global $var = 0
Global $Pause = 0

HotKeySet("{F5}", "Pause") ;La Touche qui lancera et mettra en pause.
HotKeySet("{F6}", "_Exit");La Touche qui arrêtera le script
HotKeySet("{F7}", "reboucle")

While 1
   If $var = 1 Then
      $var = 0
      ConsoleWrite("Reboucle" & @CRLF)
      ContinueLoop
   EndIf
   ;Mon Script ici !
WEnd

Func reboucle()
   $var = 1
EndFunc   ;==>reboucle
Func Pause()
   $Pause = BitXOR($Pause, 1)
   Do
      ToolTip("Pause !", 100, 100);Indique La Pause
      Sleep(50)
   Until $Pause = 0
   ToolTip("Reprise !", 100, 100);Indique La Reprise du Script
EndFunc   ;==>Pause
Func _Exit()
   Exit
EndFunc   ;==>_Exit
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#7

Message par mikell »

Précisément :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Mave
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 28 avr. 2016 22:40
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#8

Message par Mave »

Wo, merci orax et mikell :)
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#9

Message par mdanielm »

...Ma solution avec un peu de retard!
#include "misc.au3"
Global $stop=False

while not $stop ; une boucle infinie n'existe pas
   Script()
   if IsPressed("70") then ; pause avec F1
      while not IsPressed("71") and not $stop ; 71=F2
         $stop = IsPressed("1B") ;Esc pour arrêter le script en pause
         sleep(50)
      WEnd
   EndIf
WEnd

func IsPressed($key)
   ; améliore _Ispressed en vidant le tampon
   local $ret = _IsPressed($key)
   While _IsPressed($key)
   WEnd
   return $ret
EndFunc

func Script()
   local static $n=1
   $n+=1
   ToolTip($n,0,0)
   $stop = _IsPressed("1B")
EndFunc
Mave
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 28 avr. 2016 22:40
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#10

Message par Mave »

orax bonjour j'ai testé ton script et il ne fonctionne pas :

Code : Tout sélectionner

    #RequireAdmin
    Global $var = 0
    Global $Pause = 0

    HotKeySet("{F5}", "Pause") ;La Touche qui lancera et mettra en pause.
    HotKeySet("{F6}", "_Exit");La Touche qui arrêtera le script
    HotKeySet("{F7}", "reboucle")

    While 1
        If $var = 1 Then
            $var = 0
            ConsoleWrite("Reboucle" & @CRLF)
            ContinueLoop
        EndIf
        ;Mon Script ici !
		Send ( "a" )
		Sleep ( 500 )
		Send ( "z" )
		Sleep ( 500 )
		Send ( "e" )
		Sleep ( 500 )
		Send ( "r" )
		Sleep ( 500 )
		Send ( "t" )
		Sleep ( 500 )
		Send ( "y" )
		Sleep ( 500 )
		Send ( "u" )
		Sleep ( 500 )
		Send ( "i" )
		Sleep ( 500 )
		Send ( "o" )
		Sleep ( 500 )

    WEnd

    Func reboucle()
        $var = 1
    EndFunc   ;==>reboucle
    Func Pause()
        $Pause = BitXOR($Pause, 1)
        Do
            ToolTip("Pause !", 100, 100);Indique La Pause
            Sleep(50)
        Until $Pause = 0
        ToolTip("Reprise !", 100, 100);Indique La Reprise du Script
    EndFunc   ;==>Pause
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
F5 et F6 font leur travail mais F7 ne fait rien du tout. Il ne recommence pas la boucle. J'ai essayé en changeant de F exemple F1 F2 etc.. Pareil ça ne veut pas.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#11

Message par mikell »

Bien sûr et c'est logique : la condition n'est lue qu'une seule fois avant l'envoi de la ribambelle de send()
Pour que ça marche il faut que la condition soit réellement intégrée au déroulement du script
Avec ton exemple ça pourrait donner quelque chose comme ça

Code : Tout sélectionner

    #RequireAdmin
    Global $var = 0
    Global $Pause = 0

    HotKeySet("{F5}", "Pause") ;La Touche qui lancera et mettra en pause.
    HotKeySet("{F6}", "_Exit");La Touche qui arrêtera le script
    HotKeySet("{F7}", "reboucle")

$sLettres = "azertyuiop"
Local $aLettres = StringSplit($sLettres, "")

    While 1
        For $i = 1 to $aLettres[0]
          If $var = 1 Then
              $var = 0
              ConsoleWrite("Reboucle" & @CRLF)
              ContinueLoop 2   ; reprend au While
          EndIf
          Send ($aLettres[$i] )
          Sleep ( 500 )
      Next
    WEnd

    Func reboucle()
        $var = 1
    EndFunc   ;==>reboucle
    Func Pause()
        $Pause = BitXOR($Pause, 1)
        Do
            ToolTip("Pause !", 100, 100);Indique La Pause
            Sleep(50)
        Until $Pause = 0
        ToolTip("Reprise !", 100, 100);Indique La Reprise du Script
    EndFunc   ;==>Pause
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Mave
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 28 avr. 2016 22:40
Status : Hors ligne

Re: [..] Faire redémarrer une boucle depuis le début.

#12

Message par Mave »

A merci mikell, et donc si je veux mettre plusieurs send, pour qu'il reboot je devrais marquer comment ?
Exemple un send azeryty un send {NumPad5} etc... .
Répondre