Page 1 sur 1

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

Posté : ven. 08 févr. 2008 09:38
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

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

Posté : ven. 08 févr. 2008 13:44
par ronin
salut
as tu essayé de mettre ça en deuxieme ligne juste sous le include ?

Code : Tout sélectionner

HotKeySet("{ESC}", "endscript")

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

Posté : ven. 08 févr. 2008 15:39
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.

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

Posté : ven. 08 févr. 2008 21:27
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.

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

Posté : sam. 09 févr. 2008 11:59
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
 

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

Posté : sam. 09 févr. 2008 12:11
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..

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

Posté : sam. 09 févr. 2008 12:20
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).

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

Posté : sam. 09 févr. 2008 12:22
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..