Page 1 sur 1

[R] @HOUR AND @MIN

Posté : lun. 21 janv. 2008 10:34
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

Re: @HOUR AND @MIN

Posté : lun. 21 janv. 2008 20:29
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 ?

Re: @HOUR AND @MIN

Posté : lun. 21 janv. 2008 20:52
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

Re: [..] @HOUR AND @MIN

Posté : lun. 21 janv. 2008 21:39
par Tlem
@codename44 et @sylvanie

C'est pas plus joli dans les balises de code ?
:mrgreen:

Re: [..] @HOUR AND @MIN

Posté : lun. 21 janv. 2008 21:42
par sylvanie
c'est vrai, faut que je pense à être mojns faignant :mrgreen:

Re: [..] @HOUR AND @MIN

Posté : mar. 22 janv. 2008 10:16
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...
 

Re: [..] @HOUR AND @MIN

Posté : mar. 22 janv. 2008 21:49
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...

 

Re: [..] @HOUR AND @MIN

Posté : mer. 23 janv. 2008 09:50
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.

Re: [..] @HOUR AND @MIN

Posté : mer. 23 janv. 2008 20:55
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

Re: [..] @HOUR AND @MIN

Posté : jeu. 24 janv. 2008 14:43
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...

Re: [..] @HOUR AND @MIN

Posté : jeu. 24 janv. 2008 16:40
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à :)

Re: [..] @HOUR AND @MIN

Posté : jeu. 24 janv. 2008 17:16
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 ..

Re: [..] @HOUR AND @MIN

Posté : jeu. 24 janv. 2008 20:19
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.

Re: [R] @HOUR AND @MIN

Posté : ven. 25 janv. 2008 10:07
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.