Page 1 sur 1

[R] Remplacer un Case par une autre fonction

Posté : mer. 13 févr. 2008 22:35
par Vins83
Bonsoir a tous
Voilà un petit probleme,qui me turlupine.
Je ne peut pas utiliser de case dans ma boucle while car elle doit chercher si le processus est en cour:

Donc,si j'ai çà,c faut,je peux quitter,mais ma boucle ne se ferme pas

Code : Tout sélectionner

Run("cleanmgr.exe /dc /sagerun:1")
While 1
    $msg = GUIGetMsg()
    Select
            
        ; Quitter
        Case $msg = $bouttonquitter
                       ProcessClose("cleanmgr.exe")
        Exit

        If ProcessExists("cleanmgr.exe") Then ContinueLoop
               If Not ProcessExists("cleanmgr.exe") Then ExitLoop
    EndSelect
WEnd
 
Si j'ai ça,c presque bon,car ma boucle se fini bien,mais je n'ai pas ma fonction quitter car je ne peux l'inserrer.

Code : Tout sélectionner

Run("cleanmgr.exe /dc /sagerun:1")
While 1
    If ProcessExists("cleanmgr.exe") Then ContinueLoop
    If Not ProcessExists("cleanmgr.exe") Then ExitLoop
WEnd
 
Quelqu'un a t'il une idée?

un ControlClick peu etre?

Merci

Re: [..]Remplacer un Case par une autre fonction

Posté : mer. 13 févr. 2008 23:01
par eln

Code : Tout sélectionner

Run("cleanmgr.exe /dc /sagerun:1")
While ProcessExists("cleanmgr.exe")=0 ;A adapter : http://www.autoitscript.fr/forum/viewtopic.php?f=11&t=374
    $msg = GUIGetMsg()
    Select
           
        ; Quitter
        Case $msg = $bouttonquitter
                       ProcessClose("cleanmgr.exe")
        Exit

        EndSelect
WEnd

Re: [..]Remplacer un Case par une autre fonction

Posté : jeu. 14 févr. 2008 00:36
par Tlem
Pourquoi ne pas utiliser tout simplement le RunWait ?

Code : Tout sélectionner

RunWait(@SystemDir & '\cleanmgr.exe /sagerun:1', "", @SW_SHOW)
D'après Microsoft, le commutateur /D n'est pas utilisé si on utilise /sagerun:n

Re: [..]Remplacer un Case par une autre fonction

Posté : jeu. 14 févr. 2008 06:33
par Vins83
Tlem a écrit :Pourquoi ne pas utiliser tout simplement le RunWait ?
Le probleme du runwait,c'est que je ne peu pas interrompre l'action en cours...

Re: [..]Remplacer un Case par une autre fonction

Posté : jeu. 14 févr. 2008 06:43
par Vins83
eln a écrit :

Code : Tout sélectionner

Run("cleanmgr.exe /dc /sagerun:1")
While ProcessExists("cleanmgr.exe")=0 ;A adapter : http://www.autoitscript.fr/forum/viewtopic.php?f=11&t=374
    $msg = GUIGetMsg()
    Select
           
        ; Quitter
        Case $msg = $bouttonquitter
                       ProcessClose("cleanmgr.exe")
        Exit

        EndSelect
WEnd
Merci beaucoup pour ta réponse,c'est effectivement ce dont j'avais besoin..

Re: [R]Remplacer un Case par une autre fonction

Posté : jeu. 14 févr. 2008 06:44
par Vins83
Vins83 a écrit :Bonsoir a tous
Voilà un petit probleme,qui me turlupine.
Je ne peut pas utiliser de case dans ma boucle while car elle doit chercher si le processus est en cour:

Donc,si j'ai çà,c faut,je peux quitter,mais ma boucle ne se ferme pas

Code : Tout sélectionner

Run("cleanmgr.exe /dc /sagerun:1")
While 1
    $msg = GUIGetMsg()
    Select
            
        ; Quitter
        Case $msg = $bouttonquitter
                       ProcessClose("cleanmgr.exe")
        Exit

        If ProcessExists("cleanmgr.exe") Then ContinueLoop
               If Not ProcessExists("cleanmgr.exe") Then ExitLoop
    EndSelect
WEnd
 
Si j'ai ça,c presque bon,car ma boucle se fini bien,mais je n'ai pas ma fonction quitter car je ne peux l'inserrer.

Code : Tout sélectionner

Run("cleanmgr.exe /dc /sagerun:1")
While 1
    If ProcessExists("cleanmgr.exe") Then ContinueLoop
    If Not ProcessExists("cleanmgr.exe") Then ExitLoop
WEnd
 
Quelqu'un a t'il une idée?

un ControlClick peu etre?

Merci

Re: [R]Remplacer un Case par une autre fonction

Posté : jeu. 14 févr. 2008 07:35
par Tlem
Vins83 a écrit :Donc,si j'ai çà,c faut,je peux quitter,mais ma boucle ne se ferme pas

Code : Tout sélectionner

Run("cleanmgr.exe /dc /sagerun:1")
While 1
    $msg = GUIGetMsg()
    Select
            
        ; Quitter
        Case $msg = $bouttonquitter
                       ProcessClose("cleanmgr.exe")
        Exit

        If ProcessExists("cleanmgr.exe") Then ContinueLoop
               If Not ProcessExists("cleanmgr.exe") Then ExitLoop
    EndSelect
WEnd
 
Votre code n'est pas correct et ne peut fonctionner tel quel.
Vous avez mis ceci :

Code : Tout sélectionner

If ProcessExists("cleanmgr.exe") Then ContinueLoop
               If Not ProcessExists("cleanmgr.exe") Then ExitLoop
dans le case, mais après le Exit. Donc il ne peut jamais être exécuter !!!
Rajoutez 'Case Else', et mettez ce code dedans.

Conseil technique :
Vous tester le process par son nom, alors que vous utilisez la fonction Run !!!
Il serait plus judicieux de récupérer le PID, et de gérer les conditions avec.

Code : Tout sélectionner

$PID = Run("cleanmgr.exe /sagerun:1")
While 1
    $msg = GUIGetMsg()
    Select
            
        ; Quitter
        Case $msg = $bouttonquitter
           ProcessClose($PID)
           Exit
...
...
J'ai aussi déjà signalé sur mon post précédent, que d'après Microsoft, le commutateur /D n'est pas utilisé si on utilise /sagerun:n