[R] Utilisation de If..ElseIf..

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Freedoom
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 22 nov. 2008 18:59
Status : Hors ligne

[R] Utilisation de If..ElseIf..

#1

Message par Freedoom »

Bonjour,
je suis nouveau sur Autoit et je suis coincé depuis quelques jours sur un petit script je voudrai obtenir ceci (je prends pour exemple l'ouverture d'une photo pour que ca soit clair) :
je crée une fonction "func1" qui dit double-clic en "x,y" pour ouvrir une photo (ca c'est ok) a partir de la 2 possibilité : à l'ouverture de ma photo je valide la couleur d'un point connu donné et je continue le script ou bien ma photo ne s'ouvre pas et après 120 secondes j'appelle une autre fonction "func2" pour forcer l'ouverture et je continue mon script, schématiquement :

...

Code : Tout sélectionner

Call ("func1")   ; j'appelle ma fonction double-clic en x,y

$Timer = TimerInit()   ; je commence à compter
$chkcolor = 16768834   ; je déclare ma couleur


Do 
$color = PixelGetColor(10,10)   ; j'attends de valider ma couleur (actuellement j'ai ca) 
Until $color = $chkcolor

;Et la après 120 secondes d'attente si la couleur n'est pas validé je veux appeler "func2", j'avais pensé utiliser la fonction If...ElseIf mais sans succès :

$Tend = TimerDiff ()   ; je declare la variable fin du compteur

If $color = $chkcolor Then 
    Next

Else If $Tend ($Timer) > 120000 Then
        Call ("Func2")
    EndIf       
        
EndIf
Je n'arrive pas a utiliser correctement cette fonction If..ElseIf.. meme l'aide Autoit ne m'aide pas tellement, si quelqu'un avait une idée pour m'éclairer un peu ce serait vraiment sympa.



Alex
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation de If..ElseIf..

#2

Message par Tlem »

Dans votre exemple, vous renfermez la fonction PixelGetColor dans une boucle Do/Until.
Et tant que la boucle ne sera pas vraie (Until $color = $chkcolor) vous resterez prisonnier de celle-ci ...
La solution pour en sortir c'est de rajouter à la suite du PixelGetColor une vérification du timer. Si supérieur à 120s alors on quitte la boucle (Exit Loop).
Pensez aussi à rajouter une toute petite pause dans les boucles (Sleep(100) devrait suffire) pour éviter de trop solliciter le CPU.
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é".
Freedoom
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 22 nov. 2008 18:59
Status : Hors ligne

[R] Sortir d'une boucle Do...Until... avec Timer.

#3

Message par Freedoom »

Bonjour,

Merci d'avoir répondu si vite ! Cela résout bien mon problème et correspond tout a fait a ce que j'attendais, j'obtiens maintenant le code suivant :

Code : Tout sélectionner

....

Call ("func1")

$Timer = TimerInit()
$chkcolor = 16768834

    Do
        Sleep (100)
        
        $Tend = TimerDiff ($Timer)
        $color=PixelGetColor(21,1012) 
        if $Tend > 120000 then ExitLoop
            
    Until $color = $chkcolor

if $color <> $chkcolor Then
    
    Call ("Func2")

EndIf

...
Cette solution n'est peut être pas la meilleur mais me convient parfaitement, très bien vu pour le "Sleep(100)" dans la boucle je n'y avait pas pensé. Merci encore pour votre aide.
A bientôt

Alex
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation de If..ElseIf..

#4

Message par Tlem »

Vous pouvez simplifier :

Code : Tout sélectionner

        $Tend = TimerDiff ($Timer)
        $color=PixelGetColor(21,1012)
        if $Tend > 120000 then ExitLoop
en

Code : Tout sélectionner

        $color=PixelGetColor(21,1012)
        if TimerDiff ($Timer) > 120000 then ExitLoop
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é".
Freedoom
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 22 nov. 2008 18:59
Status : Hors ligne

Re: [R] Utilisation de If..ElseIf..

#5

Message par Freedoom »

C'est encore mieux ! Merci beaucoup Tlem pour ces réponses.

Amicalement.
Alex
Répondre