Page 1 sur 1
[R] Fermer des EXE à partir d'une Gui
Posté : mar. 01 févr. 2011 19:01
par Zippo
Salut Salut,
J'aimerais arrêter des Exe dans une GUI
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("test", 633, 454, 193, 125, BitOR($WS_SYSMENU,$WS_CLIPCHILDREN))
GUISetState(@SW_SHOW)
ShellExecute("test") ; on peut indiquer @sw_hide
WinWaitActive("test")
$WorPad= WinGetHandle("test")
_SetParent($WorPad, $hGUI)
WinSetState($WorPad, "", @SW_SHOWMAXIMIZED)
Do
Sleep(10)
Until GuiGetMsg() =-3
Func _SetParent($id_child, $h_parent)
If Not IsHWnd($h_parent) Then $h_parent = HWnd($h_parent)
If Not IsHWnd($id_child) Then $id_child = GUICtrlGetHandle($id_child)
If DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $id_child, "hwnd", $h_parent) <> 0 Then
Return 1
Else
seterror(1)
Return 0
EndIf
EndFunc
Je voudrais quand je quitte ma gui que les programmes Exe s'arrête
Merci d'avance!
Re: [...]Eteindre des EXE dans une Gui
Posté : mar. 01 févr. 2011 20:40
par cutprod
Bonjour,
Si tu veux arrêter le programme lancer par ton
ShellExecute("test")
utilise la fonction "WinClose"
Re: [...]Eteindre des EXE dans une Gui
Posté : mar. 01 févr. 2011 21:36
par Zippo
Sela ne fonctionne pas... Ou alors donne moi un exemple s'il vous plait. Merci
Re: [...]Eteindre des EXE dans une Gui
Posté : mar. 01 févr. 2011 23:26
par cutprod
Comment ferme tu ton Gui ?
$hGUI = GUICreate("test", 633, 454, 193, 125, BitOR($WS_SYSMENU,$WS_CLIPCHILDREN))
GUISetState(@SW_SHOW)
en même temps que la commande qui le ferme fais =
En sachant que "test" est le nom du programme que tu as essayé de lancer avec ton "ShellExecute", mais en fait ca ne va pas du tout y a un gros soucis car il te manque le chemin et l'extension du prog a lancer!!
ta commande "ShellExecute" est mal employé.
OU alors je me suis planter c'est pas ca !!
Dans ton code ou son les fameux .exe que tu veux fermer?
Tu peux utiliser "ProcessClose"
Regarde bien l'aide pour "ShellExecute"
Re: [...]Eteindre des EXE dans une Gui
Posté : mar. 01 févr. 2011 23:28
par Zippo
Sa marche toujours pas... C'est peut être le faite que sela soit dans la GUI.
Je vais délete la Gui et aprs processclose
Re: [...]Eteindre des EXE dans une Gui
Posté : mar. 01 févr. 2011 23:30
par cutprod
Il faut bien faire la différence entre ton gui "test" et ton .exe!
Ou est -il ?
Re: [...]Eteindre des EXE dans une Gui
Posté : mer. 02 févr. 2011 00:48
par Zippo
Ne tkt pas ^^,
Il y a bien mon EXE a la place de test^^
Re: [..] Fermer des EXE à partir d'une Gui
Posté : mer. 02 févr. 2011 08:21
par Tlem
"Test" est sensé représenter quoi ?
Un document ou un exécutable ?
Si c'est un exécutable, alors utilisez plutôt la commande
Run qui vous renverra un PID.
Après, un simple
ProcessClose($PID) suffira à fermer l'exe.
Si "Test" représente un document ouvert par une application genre traitement de texte, alors c'est sur la fenêtre (GUI) qu'il faut ce concentrer.
Dans ce cas, c'est bien
WinGetHandle qu'il faut utiliser, mais il faut sans doute l'adapter à la situation, car d'une machine à l'autre, l'application par défaut pour ce type de document peut être différent.
Donc il faudra rechercher dans le titre de l'application le nom du document.
WinList peut sans doute vous aider.

Re: [..] Fermer des EXE à partir d'une Gui
Posté : mer. 02 févr. 2011 19:02
par Zippo
Bonjour,
Test = Test.exe
Donc oui cela ouvre bien mon éxécutable sous SHELLEXECUTE mais avec Run, sa marche pas. Enfin, il ne me l'affiche pas dans la Gui
Re: [..] Fermer des EXE à partir d'une Gui
Posté : mer. 02 févr. 2011 19:12
par Tlem
Vous tombez donc dans la deuxième partie de ma proposition.

Re: [..] Fermer des EXE à partir d'une Gui
Posté : jeu. 03 févr. 2011 20:41
par Zippo
Tlem donne moi un petit exemple car j'ai tourné le problème dans tout les sens avec ton explication mais la mon cerveau est limité ^^ Car dans la GUI il y aura plusieurs programmes lancée..
Thank You !!

Re: [..] Fermer des EXE à partir d'une Gui
Posté : jeu. 03 févr. 2011 23:54
par Tlem
Je ne sais pas si ca va vous aider, mais voici quelque chose en rapport avec votre question.
Ce code est une démonstration de 'pilotage' ou de contrôle sur la fenêtre d'un autre processus :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("test", 633, 454, 193, 125, BitOR($WS_SYSMENU,$WS_CLIPCHILDREN))
GUISetState(@SW_SHOW)
ShellExecute("notepad.exe") ; on Lance le bloc-notes.
; Comme le titre d'un fenêtre bloc-notes vierge en Francais est 'Sans titre - Bloc-notes', j'attend quelle apparaisse.
WinWaitActive("Sans titre - Bloc-notes")
; Ici, je remet ma GUI au premier plan (comme ca pour le plaisir ...)
WinActivate($hGUI)
; Une petite pause de 3 secondes ...
Sleep(3000)
; Maintenant, j'ai deux solutions :
; 1 - Je ferme le bloc-notes par le titre de sa fenêtre :
;WinClose("Sans titre - Bloc-notes")
; Ou je recherche le PID de la fenêtre afin d'en fermer le processus.
$Process = WinGetProcess("Sans titre - Bloc-notes")
; Ou encore, je récupère le handle de la fenêtre.
$Winhnd = WinGetHandle("Sans titre - Bloc-notes")
; Avec le handle des fenêtres, je fait mumuse ...
ControlSend($Winhnd, "", "[CLASS:Edit; INSTANCE:1]", "Je réduit la GUI principale." & @CRLF)
Sleep(1000)
WinSetState($hGUI, "", @SW_SHOWMINIMIZED)
Sleep(1000)
ControlSend($Winhnd, "", "[CLASS:Edit; INSTANCE:1]", "On minimize la fenêtre du Bloc-notes." & @CRLF)
Sleep(1000)
WinSetState($Winhnd, "", @SW_SHOWMINIMIZED)
Sleep(1000)
ControlSend($Winhnd, "", "[CLASS:Edit; INSTANCE:1]", "On maximize la fenêtre du Bloc-notes." & @CRLF)
Sleep(1000)
WinSetState($Winhnd, "", @SW_SHOWMAXIMIZED)
Sleep(1000)
ControlSend($Winhnd, "", "[CLASS:Edit; INSTANCE:1]", "On restaure la fenêtre du Bloc-notes." & @CRLF)
Sleep(1000)
WinSetState($Winhnd, "", @SW_SHOWDEFAULT)
Sleep(1000)
ControlSend($Winhnd, "", "[CLASS:Edit; INSTANCE:1]", "On ferme le processus du Bloc-notes (donc pas de message d'enregistrement)." & @CRLF)
ControlSend($Winhnd, "", "[CLASS:Edit; INSTANCE:1]", "Mais juste avant, je fait réapparaitre ma GUI principale)." & @CRLF)
Sleep(4000)
WinSetState($hGUI, "", @SW_SHOWDEFAULT)
Sleep(1000)
ProcessClose($Process)
Sleep(2000)
MsgBox(64, '', 'Voilà, c''est la fin du script')
Re: [..] Fermer des EXE à partir d'une Gui
Posté : lun. 07 févr. 2011 21:03
par Zippo
Oui ! Merci beaucoup Tlem !
Tlem, is he God ?! Yes he is

... X°
Re: [..] Fermer des EXE à partir d'une Gui
Posté : lun. 07 févr. 2011 21:05
par Tlem
Bien.
Alors juste pour précision, mon pseudo est tlem et non thlem. Je me suis donc permis de corriger votre message.
Ensuite :
N'oubliez pas la balise [R] dans le titre de votre premier message si votre sujet est résolu.