[R] @HOUR AND @MIN

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
EricG
Niveau 2
Niveau 2
Messages : 18
Enregistré le : lun. 21 janv. 2008 10:22
Status : Hors ligne

[R] @HOUR AND @MIN

#1

Message par EricG »

Bonjour, et bonne année,

Je suis nouveau :D
J'ai un petit problème, cette partie de script ne fonctionne pas. AutoIt ne veut pas tester l'état de l'heure et des minutes en une fois, autrement dit AND. Comment faire ? Merci

Code : Tout sélectionner

        Case @HOUR = 14 AND @MIN = 01
            $avert = ""
            SplashTextOn("Pause longue", $avert, @DesktopWidth, @DesktopHeight, -1, -1, 0, "")
            Do
                WinActivate("Pause longue", "")
                $time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trente minutes."
                ControlSetText("Pause longue", "", "Static1", $time)
            Until @HOUR = 14 AND @MIN = 31
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

Re: @HOUR AND @MIN

#2

Message par codename44 »

salut

je ne comprends pas ton problème, je viens d'essayer ton script et il fonctionne chez moi, en rajoutant

Code : Tout sélectionner

Select
Case @HOUR = 14 AND @MIN = 01
    $avert = ""
    SplashTextOn("Pause longue", $avert, @DesktopWidth, @DesktopHeight, -1, -1, 0, "")
    Do
        WinActivate("Pause longue", "")
        $time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trente minutes."
        ControlSetText("Pause longue", "", "Static1", $time)
    Until @HOUR = 14 AND @MIN = 31
EndSelect
as tu un message d'erreur ?
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: @HOUR AND @MIN

#3

Message par sylvanie »

est ce que ce test est dans une boucle ? Car si ce n'est pas le cas, il y a de grande chance que le test soit faux ...

sinon, la partie :

Code : Tout sélectionner

Do
WinActivate("Pause longue", "")
$time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trente minutes."
ControlSetText("Pause longue", "", "Static1", $time)
Until @HOUR = 14 AND @MIN = 31

on peut économiser du cpu avec un sleep(1000) ou (60000) avant le Until
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#4

Message par Tlem »

@codename44 et @sylvanie

C'est pas plus joli dans les balises de code ?
:mrgreen:
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é".
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#5

Message par sylvanie »

c'est vrai, faut que je pense à être mojns faignant :mrgreen:
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
EricG
Niveau 2
Niveau 2
Messages : 18
Enregistré le : lun. 21 janv. 2008 10:22
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#6

Message par EricG »

Bonjour et merci,

d'abord, ce n'est qu'un bout du script, il y a d'autres Case(s) et j'ai oublié EndSelect.
Je sais que si je ne mets pas @HOUR ou @MIN, ça marche avec un seul élément, mais @HOUR... AND @MIN... ça ne fonctionne pas. Le tout est effectivement dans une boucle. C'est la cohabitation des Cases qui pose problème... Je désactive ceci ou cela mais les effets sont bizarres.
Les Sleep() ne font pas les durées spécifiées du fait qu'il y a plusieurs autres actions, c'est un petit peu embêtant. Je vous mets le script en entier, il sert éviter que je reste trop longtemps devant mon ordinateur :

(donc, c'est le Case du milieu qui ne s'exécute pas)

Code : Tout sélectionner

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.2.6.0
 Author:         Moi

#ce ----------------------------------------------------------------------------

#include <Date.au3>

;~ Break(0)

while 1 = 1 ; Boucle infinie pour bloqueer l'utilisateur.
    Select ; Plusieurs cas...
        
        Case @MIN = 0 OR @MIN = 10 OR @MIN = 20 OR @MIN = 30 OR @MIN = 40 OR @MIN = 50 ; Toutes les dix minutes.
            $avert = ""
            SplashTextOn("Pause courte", $avert, @DesktopWidth, @DesktopHeight, -1, -1, 0, "") ; On ouvre une boite flottante.
            Do
                WinActivate("Pause", "") ; On active la boite...
                $time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trois minutes."
                ControlSetText("Pause courte", "", "Static1", $time) ; Pour l'afficher...
            Until @MIN = 3 OR @MIN = 13 OR @MIN = 23 OR @MIN = 33 OR @MIN = 43 OR @MIN = 53 ; Trois minutes donc.
            
        Case @HOUR = 14 AND @MIN = 01
            $avert = ""
            SplashTextOn("Pause longue", $avert, @DesktopWidth, @DesktopHeight, -1, -1, 0, "") ; On ouvre une boite flottante.
            Do
                WinActivate("Pause longue", "") ; On active la boite...
                $time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trente minutes."
                ControlSetText("Pause longue", "", "Static1", $time) ; Pour l'afficher...
            Until @HOUR = 14 AND @MIN = 31 ; Trois minutes donc.
            
        Case Else ; A la fin des pauses
            $avert = ""
            SplashTextOn("Horloge", $avert, 100, 20, -1, -1, 16, "", 12, 1000) ; On ouvre une boite flottante.
            Do
                $time = _NowTime(5)
                ControlSetText("Horloge", "", "Static1", $time) ; Pour l'afficher...
            Until @MIN = 0 OR @MIN = 10 OR @MIN = 20 OR @MIN = 30 OR @MIN = 40 OR @MIN = 50
            
    EndSelect
Wend ; On continue de surveiller l'horloge...
 
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#7

Message par sylvanie »

Etrange, car chez moi ça marche.
Cependant afin d'alléger les comparaison, j'ai modifié ceci (et j'ai resizé et mis 18 en option pour le debug, car sinon le plein écran ça agace pas mal ...)

Code : Tout sélectionner

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.2.6.0
 Author:         Moi

#ce ----------------------------------------------------------------------------

#include <Date.au3>

;~ Break(0)

while 1 = 1 ; Boucle infinie pour bloqueer l'utilisateur.
    Select ; Plusieurs cas...
        
        Case Mod(@MIN,10) = 0; Toutes les dix minutes.
            $avert = ""
            SplashTextOn("Pause courte", $avert, @DesktopWidth/2, @DesktopHeight/2, -1, -1, 18, "") ; On ouvre une boite flottante.
            WinActivate("Pause", "") ; On active la boite...
            Do
                $time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trois minutes."
                ControlSetText("Pause courte", "", "Static1", $time) ; Pour l'afficher...
                Sleep(1000)
            Until Mod(@MIN,10) = 3  ; Trois minutes donc.
            
        Case @HOUR = 14 AND @MIN = 01
            $avert = ""
            SplashTextOn("Pause longue", $avert, @DesktopWidth/2, @DesktopHeight/2, -1, -1, 18, "") ; On ouvre une boite flottante.
; par défaut ton splash est toujours en avant plan, donc pas la peine d'inclure son activation en boucle
            WinActivate("Pause longue", "") ; On active la boite...
            Do
                $time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trente minutes."
                ControlSetText("Pause longue", "", "Static1", $time) ; Pour l'afficher...
                Sleep(1000)
            Until @HOUR = 14 AND @MIN = 31 ; Trois minutes donc.
            
        Case Else ; A la fin des pauses
            $avert = ""
            SplashTextOn("Horloge", $avert, 100, 20, -1, -1, 18, "", 12, 1000) ; On ouvre une boite flottante.
            Do
                $time = _NowTime(5)
                ControlSetText("Horloge", "", "Static1", $time) ; Pour l'afficher...
                Sleep(1000)
            Until Mod(@MIN,10) = 0;
            
    EndSelect
Wend ; On continue de surveiller l'horloge...

 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
EricG
Niveau 2
Niveau 2
Messages : 18
Enregistré le : lun. 21 janv. 2008 10:22
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#8

Message par EricG »

Bonjour et merci,

mais ça marche du genre « tiens, il est 14 H la boite apparait, parfait » ou « il ne se passe rien » parce que c'est justement mon problème.
Bon, le plein écran, c'est parce que je suis bien encore capable de contourner et je serais encore un peu trop devant mon ordinateur.
C'est étrange, je ne sais pas quoi faire. Si quelqu'un à une idée d'ici peu, ou si c'est moi, je clôturerais le fil.

Merci encore.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#9

Message par sylvanie »

ha, c'est la clause du 14h 01 qui échoue, je viens de comprendre le pb,

c'est la première boucle d'attente qui fait qu'on rate la deuxième condition puisque si il est 14 h 00, on est dans le premier cas, et on reste bloqué pendant 3 minutes. Donc quand on en sort, il est 14h03, et on a loupé 14h01.

il faut compléter le premier teste de sortie par :
Until ( Mod(@MIN,10) = 3 Or (@HOUR = 14 AND @MIN = 01) ) ; Trois minutes donc ou 14h01
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
EricG
Niveau 2
Niveau 2
Messages : 18
Enregistré le : lun. 21 janv. 2008 10:22
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#10

Message par EricG »

Bonjour et merci,

j'ai mis du temps à répondre pour cause de tests justement. J'ai modifié la condition de sortie de boucle comme tu as dis, mais ça ne marchait pas encore, j'ai appliqué ce principe au case 3, ce qui est idiot, mais ça a déverrouillé le problème, je ne sais pas trop comment ! Je pourrais peut être l'enlever, avec d'autres fignolages, si tu as des idées. Ceci dit, c'est presque parfait. Je colle le script ici (son principe est d'être assez autoritaire avec moi :mrgreen: nous sommes d'accord) merci encore :

Code : Tout sélectionner

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.2.6.0
 Author:         Moi

#ce ----------------------------------------------------------------------------

#include <Date.au3>

;~ Break(0)

while 1 = 1 ; Boucle infinie pour bloqueer l'utilisateur.
    Select ; Plusieurs cas...
       
        Case Mod(@MIN,10) = 0; Toutes les dix minutes.
            $avert = ""
            SplashTextOn("Pause courte", $avert, @DesktopWidth/2, @DesktopHeight/2, -1, -1, 16, "") ; On ouvre une boite flottante.
            Do
                $time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trois minutes."
                ControlSetText("Pause courte", "", "Static1", $time) ; Pour l'afficher...
                Sleep(1000)
                WinActivate("Pause", "") ; On active la boite...
            Until ( Mod(@MIN,10) = 3 Or (@HOUR = 13 AND @MIN = 59) ) ; Trois minutes donc ou 13h59

        Case @HOUR = 13 AND @MIN = 59
            SoundPlay(@WindowsDir & "\media\tada.wav",1)
            $avert = ""
            SplashTextOn("Pause longue", $avert, @DesktopWidth/2, @DesktopHeight/2, -1, -1, 16, "") ; On ouvre une boite flottante.
            Do
                $time = @LF & "Il est : " & _NowTime(5) & " et vous faites une pause de trente minutes."
                ControlSetText("Pause longue", "", "Static1", $time) ; Pour l'afficher...
                Sleep(1000)
                WinActivate("Pause longue", "") ; On active la boite...
            Until @HOUR = 14 AND @MIN = 31; Trente minutes donc.
           
        Case Else ; A la fin des pauses
            $avert = ""
            SplashTextOn("Horloge", $avert, 150, 35, -1, -1, 16, "", 24, 1000) ; On ouvre une boite flottante.
            Do
                $time = _NowTime(5)
                ControlSetText("Horloge", "", "Static1", $time) ; Pour l'afficher...
                Sleep(1000)
            Until ( Mod(@MIN,10) = 0 Or (@HOUR = 13 AND @MIN = 59) ) ; Trois minutes donc ou 14h01
           
    EndSelect
Wend ; On continue de surveiller l'horloge...
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#11

Message par ani »

bonjour

J'ai juste une petite remarque, que vaut while 1 = 1 (çà me semble peu exact, ou j'ai encore tord ? merci ).
Y à d'autre chose mais voilà :)
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#12

Message par codename44 »

salut

while 1 = 1 est toujours vrai, donc la boucle est infinie
je suppose que while 0 = 0 fonctionne aussi xD

sinon while 1 suffit ..
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] @HOUR AND @MIN

#13

Message par sylvanie »

le fait de mettre ce contrôle dans le 3eme cas n'est pas idiot du tout, c'est même nécessaire, je n'avait pas fait attention, car dans le cas de de 13 h 59, et qu'il est 13h 58 on est dans ce cas, et on est "emprisonné" jusqu' à 14h00 sans ce contrôle.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
EricG
Niveau 2
Niveau 2
Messages : 18
Enregistré le : lun. 21 janv. 2008 10:22
Status : Hors ligne

Re: [R] @HOUR AND @MIN

#14

Message par EricG »

Bonjour,

Oui, la boucle est infinie, c'est le principe, je lance le script au démarrage de mon ordinateur.

Le Case 3, je n'arrive pas à le figurer, mais si j'ai raison...
En principe, ça devrait fonctionner, je le teste pour aujourd'hui.
Si je ne reviens pas là-dessus, alors le fil est terminé (si je dois faire un truc... )

Merci.
Répondre