[R] Arrêter une action en cours lancer par un RunWait

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Vins83
Membre émérite
Membre émérite
Messages : 220
Enregistré le : mer. 25 juil. 2007 17:43
Status : Hors ligne

[R] Arrêter une action en cours lancer par un RunWait

#1

Message par Vins83 »

Bonjour à tous.

Sa a l'air bien bete comme ça,mais pas moyen de trouver.

Code : Tout sélectionner

#include <GUIConstants.au3>

GUICreate("Stop action en cours", 330, 60, -1, -1)

$button = GUICtrlCreateButton("Lancer notepad", 10, 10, 120, 40)
$exit = GUICtrlCreateButton("Stop action", 200, 10, 120, 40)

GUISetState()
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $button
            RunWait("Notepad.exe", @WindowsDir)
        Case $msg = $exit
            Exit
    EndSelect
WEnd
 
J'ai remarqué que lorsque que l'on voullait stoper une action en cours,il était impossible tant que celle ci n'était pas fini,et là sa me gene un peu.

Quelqu'un a t'il une solution?

Merci
ronin
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 01 févr. 2008 23:28
Status : Hors ligne

Re: [..] Arreter une action en cours lancer par un runwait

#2

Message par ronin »

salut
as tu essayé de mettre ça en deuxieme ligne juste sous le include ?

Code : Tout sélectionner

HotKeySet("{ESC}", "endscript")
Avatar du membre
Vins83
Membre émérite
Membre émérite
Messages : 220
Enregistré le : mer. 25 juil. 2007 17:43
Status : Hors ligne

Re: [..] Arreter une action en cours lancer par un runwait

#3

Message par Vins83 »

Effectivement trés pratique,mais mon boutton quitter ne sert tjrs a rien.

Code : Tout sélectionner

#include <GUIConstants.au3>
HotKeySet("{ESC}", "Terminate")

GUICreate("Stop action en cours", 330, 60, -1, -1)

$button = GUICtrlCreateButton("Lancer notepad", 10, 10, 120, 40, $WS_EX_APPWINDOW)
$exit = GUICtrlCreateButton("Stop action", 200, 10, 120, 40, $WS_EX_APPWINDOW)

GUISetState()
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $button
            RunWait("Notepad.exe", @WindowsDir)
        Case $msg = $exit
            Exit
    EndSelect
WEnd

Func Terminate()
    ProcessClose("Notepad.exe")
    Exit 0
EndFunc   ;==>Terminate
Peu etre modifier la fonction avec un AdlibEnable pour que l'action soit tjrs possible.
Je cherche encore un peu de ce coté là..

Merci quand meme.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Arreter une action en cours lancer par un runwait

#4

Message par Tlem »

Il est effectivement possible, avec AdlibEnable de contourner le problème, mais à la base vous lancé le BlocNote avec la commande RunWait.
Or cette commande ne rendra la main au script que si vous fermer le BlocNote.
La solution serait de lancer le BlocNote par un simple Run (Ou encore mieux : ShellExecute), en récupèrent le PID de ce dernier (Pour le PID regarder la doc de la commande).

La commande Run lancera le BlocNote en vous retournant son PID, et le script reprendra la main pour la suite des opérations.
Avec ce fameux PID il vous sera possible de supprimer le processus du BlocNote, et donc de faire ce que vous rechercher.
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: [..] Arreter une action en cours lancer par un runwait

#5

Message par sylvanie »

Bonjour en coup de vent,
et voici une petite synthèse avec gestion de non relance:

Code : Tout sélectionner

#include <GUIConstants.au3>
AutoItSetOption("Onexitfunc","Bye")

GUICreate("Stop action en cours", 330, 60, -1, -1)

$button = GUICtrlCreateButton("Lancer notepad", 10, 10, 120, 40)
$exit = GUICtrlCreateButton("Stop action", 200, 10, 120, 40)
$pid=0
GUISetState()
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $button
            Lance_notepad()
        Case $msg = $exit
            Exit
    EndSelect
WEnd


Func Lance_notepad()
    
    If Verif_instance($pid)=0 Then  
        $pid=Run("Notepad.exe", @WindowsDir)
    Else
        MsgBox(0,"Instance de notepad existante","une instace a déjà été lancée")
    EndIf
EndFunc

Func Verif_instance($local_pid)
    If $pid=0 Or Not ProcessExists($pid) Then Return 0
    Return 1
EndFunc

Func Bye()
    ProcessClose($pid)
    Exit 0
EndFunc
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Arreter une action en cours lancer par un runwait

#6

Message par ani »

Arrêter une action en cours lancer par un runwait
et non un run ;)

kill -9 (stop process) ^^'

As-tu lu l'aide vins ? la réponse y est..
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Arreter une action en cours lancer par un runwait

#7

Message par Tlem »

@ani

Tu ne peut arrêter le process lancer par un RunWait, puisque le script est en attente tant que le process n'est pas fermer/executer (Sauf si utilisation de AdlibEnable).
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
Vins83
Membre émérite
Membre émérite
Messages : 220
Enregistré le : mer. 25 juil. 2007 17:43
Status : Hors ligne

Re: [..] Arreter une action en cours lancer par un runwait

#8

Message par Vins83 »

Bonjour a tous,j'ai trouver ce que je cherché,merci a vous.
Le fait que je veuille que si je lance plusieurs opération a la suite (donc pas simultanément),il a fallu que je fasse ceux ci:

Code : Tout sélectionner

#include <GUIConstants.au3>
$PID = "notepad.exe"
$PID1 = "wordpad.exe"

GUICreate("Stop action en cours", 330, 80, -1, -1)

$button = GUICtrlCreateCheckbox("Lancer notepad", 10, 5, 100, 40, $WS_EX_APPWINDOW)
$button1 = GUICtrlCreateCheckbox("Lancer wordpad", 115, 5, 100, 40, $WS_EX_APPWINDOW)
$exit = GUICtrlCreateButton("Stop action", 220, 5, 100, 40, $WS_EX_APPWINDOW)
$lanceraction = GUICtrlCreateButton("Lancer action", 10, 50, 310, 30)

GUISetState()
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ProcessClose($PID)
            ProcessClose($PID1)
            ExitLoop
            
        Case $msg = $lanceraction
            
            If BitAND(GUICtrlRead($button), $GUI_CHECKED) Then
                ShellExecute($PID)
            EndIf
            
            If BitAND(GUICtrlRead($button1), $GUI_CHECKED) Then
                While 1
                    If Not ProcessExists($PID) Then ExitLoop
                    $msg = GUIGetMsg()
                    Select
                        Case $msg = $GUI_EVENT_CLOSE
                            ProcessClose($PID)
                            ProcessClose($PID1)
                            ExitLoop
                        Case $msg = $exit
                            ProcessClose($PID)
                            ProcessClose($PID1)
                            Exit
                    EndSelect
                    Sleep(0)
                WEnd
                ShellExecute($PID1)
            EndIf
            
        Case $msg = $exit
            ProcessClose($PID)
            ProcessClose($PID1)
            Exit
    EndSelect
WEnd
Un peu long a preimere vu,mais en incluant tout dans des fonctions,le tout peut etre beaucoup plus light..
Répondre