Page 1 sur 1
[R] Impossible de fermer le programme
Posté : dim. 03 avr. 2011 16:47
par guillot40
Bonjour,
Je viens de créer un petit logiciel qui permet de relancer un programme quand se dernier ce ferme.
Mon probleme :
Quand je clique sur le bouton [Exécuter !] il devient alors impossible de fermer le programme ou de clique sur [Stop].
Si quelqu'un à une idée, je suis preneur !
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstants.au3>
Global $Largeur = 300, $Hauteur = 150, $Titre = "Restarter V"
Local $Ver = "1.0.42"
$Form1 = GUICreate($Titre & $Ver, $Largeur, $Hauteur, -1, -1)
$Button1 = GUICtrlCreateButton("Executer !", 50, 115, 75, 25)
$Button2 = GUICtrlCreateButton("Stop", 170, 115, 75, 25)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Fin()
Case $Button1
TrayTip("Info", "Restarter MaNGOS has been started", 10, 16)
While 1
If Not ProcessExists("mangosd.exe") Then Run("mangosd.exe")
If Not ProcessExists("realmd.exe") Then Run("realmd.exe")
Sleep(10)
WEnd
Case $Button2
ProcessClose("mangosd.exe")
ProcessClose("realmd.exe")
EndSwitch
WEnd
Func Fin()
SplashTextOn("", "Fermeture du Restarter en cours, Veuillez patienter ...", 550, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
Sleep(2000)
SplashOff()
Exit
EndFunc
Re: [..] Impossible de fermer le programme
Posté : dim. 03 avr. 2011 16:50
par Tlem
En fait, dans le Case $Button1 vous faites une boucle While 1 dont votre code ne sort jamais. Donc il ne peut interpréter les autres commandes et récupérer les messages GUI (GUIGetMsg()).
Re: [..] Impossible de fermer le programme
Posté : dim. 03 avr. 2011 17:17
par guillot40
Comment je peux faire pour faire la même action et que cela fonctionne correctement ?
Re: [..] Impossible de fermer le programme
Posté : dim. 03 avr. 2011 17:31
par Tlem
Je dirais, que vous n'avez qu'à supprimer la boucle
While/Wend du
Case $Button1.
Seulement, j'imagine que si vous l'avez fait comme cela, c'est pour que la boucle surveille les deux processus et les relance si l'un d'eux est fermé.
Donc le mieux serait sans doute d'activer une fonction avec
AdlibRegister en modifiant le temps à une ou deux secondes (voir plus) et lorsque vous voulez l’arrêter il vous suffit de la désactiver avec
AdlibUnRegister.
Je ne détail pas trop, car l'exemple de la doc est explicite.

Re: [..] Impossible de fermer le programme
Posté : dim. 03 avr. 2011 17:31
par guillot40
Ok merci beaucoup ! Je vais faire des recherches sur cette fonction.
Re: [..] Impossible de fermer le programme
Posté : dim. 03 avr. 2011 17:41
par Tlem
N'oubliez pas la balise [R] dans le titre de votre premier message lorsque votre sujet sera résolu.
Re: [..] Impossible de fermer le programme
Posté : dim. 03 avr. 2011 17:50
par guillot40
Voila, je viens de réussir.
► Afficher le texte
#include <GuiConstants.au3>
Global $Largeur = 300, $Hauteur = 150, $Titre = "Restarter MaNGOS V"
Local $Ver = "1.0.41"
$Form1 = GUICreate($Titre & $Ver, $Largeur, $Hauteur, -1, -1)
$Button1 = GUICtrlCreateButton("Executer !", 50, 115, 75, 25)
$Button2 = GUICtrlCreateButton("Stop", 170, 115, 75, 25)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Fin()
Case $Button1
TrayTip("Info", "Restarter MaNGOS has been started", 10, 16)
Adlibregister ("x", 300)
Case $Button2
TrayTip("Info", "Restarter MaNGOS has been stoped", 10, 16)
AdlibUnregister ("x")
ProcessClose("mangosd.exe")
ProcessClose("realmd.exe")
EndSwitch
WEnd
Func Fin()
SplashTextOn("", "Fermeture du Restarter MaNGOS en cours, Veuillez patienter ...", 550, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
Sleep(2000)
SplashOff()
Exit
EndFunc
Func x()
If Not ProcessExists("mangosd.exe") Then Run("mangosd.exe")
If Not ProcessExists("realmd.exe") Then Run("realmd.exe")
EndFunc
Merci pour l´aide !
Re: [..] Impossible de fermer le programme
Posté : dim. 03 avr. 2011 17:54
par Tlem
N'oubliez pas la balise de code (même dans une balise Spoiler).
Merci