Page 1 sur 1
[..] Fermeture d'une GUI
Posté : mar. 25 oct. 2011 13:31
par XeniOne
Bonjour,
voici mon PB:
Moi et un collègue développons un utilitaire pour éviter les tâches répétitives au boulot.
Je suis actuellement en train d'améliorer le bouton "shutdown" qui m'ouvre une deuxième GUI composé de 3 Boutons (Eteindre PC distant, Fermer session, Reboot Distant), seulement, quand j'ai fais mon choix et que je ferme cette fenêtre, cela ferme tout mon script! Du coup je dois relancer l'utilitaire pour continuer.
Voici le bout de code en question.
Code : Tout sélectionner
case $msg=$button3
$rinput = GUICtrlRead ($input1)
Local $Form2 = GUICreate("Choix du shutdown", 374, 130, 335, 209)
Local $Label5 = GUICtrlCreateLabel("", 112, 32, 156, 17)
Local $Buttoneteindre = GUICtrlCreateButton("Eteindre", 30, 15, 100, 30, $WS_GROUP)
Local $Buttonredemarrer = GUICtrlCreateButton("Reboot", 140, 15, 100, 30, $WS_GROUP)
Local $Buttonfermersession = GUICtrlCreateButton("LogOff", 250, 15, 100, 30, $WS_GROUP)
$Input3 = GUICtrlCreateInput("", 0, 60, 374, 70)
GUISetState(@SW_SHOW)
While 2 ;Début de boucle
Local $nMsg = GUIGetMsg() ;Ne pas toucher
Switch $nMsg ;Ne pas toucher
Case $GUI_EVENT_CLOSE ;Pour fermer la Gui, c'est la croix rouge en haut a droite. Fait les actions si elle est enclenchée
Exit ;Pour quitter le script
Case $Buttoneteindre ;Si on appui sur le boutton choix 1
run(@ComSpec & ' /c shutdown -f -s -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Extinction du système distant", "Le système distant va s'éteindre") ;Affiche une boite de dialogue
;A la place de la MsgBox vous pouvez faire bien d'autes action, un calcul, créer un dossier ... bref les possibilités sont énormes
Case $Buttonredemarrer ;Si on appui sur le boutton choix 2
run(@ComSpec & ' /c shutdown -f -r -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Redemarrage du système distant", "Le système distant va redemarrer") ;Affiche une boite de dialogue
Case $Buttonfermersession ;Si on appui sur le boutton choix 3
run(@ComSpec & ' /c shutdown -f -l -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Fermeture de session", "La session distante va se fermer") ;Affiche une boite de dialogue
EndSwitch
WEnd ;Fin de boucle
Si vous avez besoin d'autre chose, no probs
Merci, bonne journée.
Re: [..] Fermeture une GUI
Posté : mar. 25 oct. 2011 13:46
par ani
while 2 → while 1
exit → winclose("Choix du shutdown")
doit exister une autre maniere pour fermer cette fenêtre.
Re: [..] Fermeture une GUI
Posté : mar. 25 oct. 2011 14:05
par mikell
Yes, avec (voir l'aide)
Code : Tout sélectionner
$nMsg = GUIGetMsg([color=#FF0000]1[/color])
$nMsg[0] = 0 or Event ID or Control ID [color=#008000] ; $GUI_EVENT_CLOSE[/color]
$nMsg[1] = The window handle the event is from [color=#008000] ; WinGetHandle("gui")[/color]
Re: [..] Fermeture d'une GUI
Posté : mar. 25 oct. 2011 15:21
par XeniOne
@mikell: ça ne fonctionne pas...
Code : Tout sélectionner
While 1
Local $nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
WinClose("Choix du shutdown")
Case $Buttoneteindre
run(@ComSpec & ' /c shutdown -f -s -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Extinction du système distant", "Le système distant va s'éteindre")
Case $Buttonredemarrer
run(@ComSpec & ' /c shutdown -f -r -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Redemarrage du système distant", "Le système distant va redemarrer")
Case $Buttonfermersession
run(@ComSpec & ' /c shutdown -f -l -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Fermeture de session", "La session distante va se fermer")
EndSwitch
WEnd
Plus rien ne se ferme...aucune action
@ani: J'avais cherché dans l'aide mais je comprends pas tout.
L'aide que tu as posté m'a encore plus perdu ^^
Re: [..] Fermeture d'une GUI
Posté : mar. 25 oct. 2011 16:14
par moi
Code : Tout sélectionner
If WinActive("ma fenetre 1") Then
GUIDelete($fotmmafenetre1)
ElseIf WinActive("ma fenetre 2l") Then
GUIDelete($fotmmafenetre2)
EndIf
?
Re: [..] Fermeture d'une GUI
Posté : mar. 25 oct. 2011 17:01
par GaRydelaMer
Bonjour
pourtant il t'a donné la réponse
VOIR L'AIDE et GUIGetMsg
(1)
Code : Tout sélectionner
Local $aMsg, $CtrlMsgId, $HWnd
While 1
$aMsg = GUIGetMsg(1)
$CtrlMsgId = $aMsg[0]
$HWnd = $aMsg[1]
Select
Case $CtrlMsgId = $GUI_EVENT_CLOSE
If $HWnd = $GUI_1 Then ; si $GUI_1 et la fenêtre principale
ExitLoop; ici on quitte la boucle
EndIf
GUIDelete($HWnd); ici on ferme juste la fenêtre les autres
Case ; Ici les autres messages ou contrôles à traiter Attention tu peux avoir 2 contrôles qui ont le même ID sur 2 fenêtres différentes
EndSelect
Sleep(10)
WEnd
Re: [..] Fermeture d'une GUI
Posté : mar. 25 oct. 2011 21:59
par mikell
Merci Gary mais pour la compréhension je crois qu'il vaut mieux faire simple
Code : Tout sélectionner
While 1
$nMsg = GUIGetMsg(1)
Select
Case $nMsg[0] = $GUI_EVENT_CLOSE
If $nMsg[1] = $gui_2 Then [color=#008000]; fenêtre fille[/color]
GUIDelete($gui_2) [color=#008000]; on ferme la fenêtre fille[/color]
Else [color=#008000]; fenêtre principale[/color]
Exit [color=#008000]; on se barre[/color]
EndIf
EndSelect
Wend
Re: [..] Fermeture d'une GUI
Posté : mer. 26 oct. 2011 09:35
par GaRydelaMer
Merci Mikell mais je vois pas la différence avec ce que j'ai écris, de plus moi au moins je déclare mes variables !!!
De plus avec Ta solution, si tu as 2 fenêtre fille ça marche plus
Re: [..] Fermeture d'une GUI
Posté : mer. 26 oct. 2011 13:59
par mikell
Bien sûr que c'est pareil, tu as raison sur tous les points, c'était juste manière de simplifier un max pour faire comprendre plus facilement le principe ^^
Avec 2 fenêtres filles un " ElseIf $nMsg[1] = $gui_3 Then... " ferait pas l'affaire ?
Re: [..] Fermeture d'une GUI
Posté : mer. 26 oct. 2011 14:04
par GaRydelaMer
Si tu veux !!
ou ca:
Code : Tout sélectionner
Case $nMsg[0] = $GUI_EVENT_CLOSE And $nMsg[1] = $GUI_1
Exit
Case $nMsg[0] = $GUI_EVENT_CLOSE And $nMsg[1] = $GUI_2
GUIDelete($GUI_2)
Case $nMsg[0] = $GUI_EVENT_CLOSE And $nMsg[1] = $GUI_3
GUIDelete($GUI_3)
Mais pour tout te dire je préfère la solution 1, et j'utilise beaucoup plus mode événementiel (que ca d'ailleur).
Et la j'ai une fonction pour l'exit et une autre pour fermer la fenêtre.
Re: [..] Fermeture d'une GUI
Posté : mer. 26 oct. 2011 16:34
par XeniOne
Youpi....marche pas...
Code : Tout sélectionner
; Bouton de SHUTDOWN OK
case $msg=$button3
$rinput = GUICtrlRead ($input1)
Local $Form2 = GUICreate("Choix du shutdown", 374, 130, 335, 209) ;Créer une fenêtre
Local $Label5 = GUICtrlCreateLabel("", 112, 32, 156, 17) ;Créer un label c'est un texte. remplacer ce qu'il y a entre "" par votre question
Local $Buttoneteindre = GUICtrlCreateButton("Eteindre", 30, 15, 100, 30, $WS_GROUP) ;Créer un boutton
Local $Buttonredemarrer = GUICtrlCreateButton("Reboot", 140, 15, 100, 30, $WS_GROUP) ;Créer un boutton
Local $Buttonfermersession = GUICtrlCreateButton("LogOff", 250, 15, 100, 30, $WS_GROUP) ;Créer un boutton
$Input3 = GUICtrlCreateInput("", 0, 60, 374, 70)
GUISetState(@SW_SHOW)
Local $aMsg, $CtrlMsgId, $HWnd
While 1
$aMsg = GUIGetMsg(1)
$CtrlMsgId = $aMsg[0]
$HWnd = $aMsg[1]
Select
Case $CtrlMsgId = $GUI_EVENT_CLOSE
If $HWnd = $Form2 Then ; si $GUI_1 et la fenêtre principale
ExitLoop; ici on quitte la boucle
EndIf
GUIDelete($HWnd); ici on ferme juste la fenêtre les autres
Case $Buttoneteindre
run(@ComSpec & ' /c shutdown -f -s -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Extinction du système distant", "Le système distant va s'éteindre")
Case $Buttonredemarrer
run(@ComSpec & ' /c shutdown -f -r -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Redemarrage du système distant", "Le système distant va redemarrer")
Case $Buttonfermersession
run(@ComSpec & ' /c shutdown -f -l -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Fermeture de session", "La session distante va se fermer")
EndSelect
Sleep(10)
WEnd
Ca m'ouvre direct le bouton éteindre et impossible d'éteindre le script.... --"
Re: [..] Fermeture d'une GUI
Posté : mer. 26 oct. 2011 16:41
par GaRydelaMer
c'est normal, tu as inclus le code dans une autre boucle, remplace ExitLoop par Exit.
Mais le mieux serai d'avoir qu'une While --- Wend
Re: [..] Fermeture d'une GUI
Posté : mer. 26 oct. 2011 22:33
par PandiPanda
sinon à la place du guiGetMsg() y'a toujours l'alternative avec
GUICtrlSetOnEvent()
► Afficher le texteExemple ^^
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Opt("GUICoordMode", 2)
Opt("GUIResizeMode", 1)
Opt("GUIOnEventMode", 1)
Example()
While 1
Sleep(10)
WEnd
Func Example()
Local $parent1, $ok1, $cancel1
$parent1 = GUICreate("Parent1")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents",$parent1)
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents",$parent1)
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents",$parent1)
$ok1 = GUICtrlCreateButton("change", 10, 30, 50)
GUICtrlSetOnEvent(-1, "changePressed")
GUISetState(@SW_SHOW)
EndFunc ;==>Example
Func Exemple2()
Local $parent2, $ok2, $cancel2
$parent2 = GUICreate("Parent2",400,400,0,0)
GUISetOnEvent($GUI_EVENT_CLOSE, "guiDelete2nd",$parent2)
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents",$parent2)
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents",$parent2)
$cancel2 = GUICtrlCreateButton("Cancel", 0, -1)
GUICtrlSetOnEvent(-1, "CancelPressed")
GUISetState(@SW_SHOW)
; Just idle aroun
EndFunc ;==>Example
Func changePressed()
MsgBox(0, "change", "ouvrons la seconde GUI ...")
Exemple2()
EndFunc ;==>OKPressed
Func guiDelete2nd()
GUIDelete()
EndFunc
Func CancelPressed()
MsgBox(0, "Cancel Pressed","cancel a été activé")
EndFunc ;==>CancelPressed
Func SpecialEvents()
Select
Case @GUI_CtrlId = $GUI_EVENT_CLOSE
MsgBox(0, "Close Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
Exit
Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
MsgBox(0, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
Case @GUI_CtrlId = $GUI_EVENT_RESTORE
MsgBox(0, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
EndSelect
EndFunc ;==>SpecialEvents
Re: [..] Fermeture d'une GUI
Posté : mer. 02 nov. 2011 13:30
par XeniOne
J'veux faire simple...
ça m'affiche direct le message "MsgBox( 0, "Extinction du système distant", "Le système distant va s'éteindre")"
Qu'est-ce qui cloche?? Je suis pas loin j'en suis sur...
Dès que je modifie un truc c'est ou ça qui se passe ou alors rien ne se passe...
Code : Tout sélectionner
; Bouton de SHUTDOWN OK
case $msg=$button3
$rinput = GUICtrlRead ($input1)
Local $Form2 = GUICreate("Choix du shutdown", 374, 130, 335, 209) ;Créer une fenêtre
Local $Label5 = GUICtrlCreateLabel("", 112, 32, 156, 17) ;Créer un label c'est un texte. remplacer ce qu'il y a entre "" par votre question
Local $Buttoneteindre = GUICtrlCreateButton("Eteindre", 30, 15, 100, 30, $WS_GROUP) ;Créer un boutton
Local $Buttonredemarrer = GUICtrlCreateButton("Reboot", 140, 15, 100, 30, $WS_GROUP) ;Créer un boutton
Local $Buttonfermersession = GUICtrlCreateButton("LogOff", 250, 15, 100, 30, $WS_GROUP) ;Créer un boutton
$Input3 = GUICtrlCreateInput("", 0, 60, 374, 70)
GUISetState(@SW_SHOW)
Local $nMsg, $Buttoneteindre, $Buttonredemarrer, $Buttonfermersession
While 1
$nMsg = GUIGetMsg(1)
Select
Case $nMsg[0] = $GUI_EVENT_CLOSE
If $nMsg[1] = $Form2 Then ; fenêtre fille
GUIDelete($Form2) ; on ferme la fenêtre fille
Else ; fenêtre principale
Exit ; on se barre
EndIf
Case $Buttoneteindre
run(@ComSpec & ' /c shutdown -f -s -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Extinction du système distant", "Le système distant va s'éteindre")
Case $Buttonredemarrer
run(@ComSpec & ' /c shutdown -f -r -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Redemarrage du système distant", "Le système distant va redemarrer")
Case $Buttonfermersession
run(@ComSpec & ' /c shutdown -f -l -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Fermeture de session", "La session distante va se fermer")
EndSelect
Sleep(10)
WEnd
Re: [..] Fermeture d'une GUI
Posté : mer. 02 nov. 2011 14:12
par mikell
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; Bouton de SHUTDOWN OK
; case $msg=$button3
; $rinput = GUICtrlRead ($input1)
Local $Form2 = GUICreate("Choix du shutdown", 374, 130, 335, 209) ;Créer une fenêtre
Local $Label5 = GUICtrlCreateLabel("", 112, 32, 156, 17) ;Créer un label c'est un texte. remplacer ce qu'il y a entre "" par votre question
Local $Buttoneteindre = GUICtrlCreateButton("Eteindre", 30, 15, 100, 30, $WS_GROUP) ;Créer un boutton
Local $Buttonredemarrer = GUICtrlCreateButton("Reboot", 140, 15, 100, 30, $WS_GROUP) ;Créer un boutton
Local $Buttonfermersession = GUICtrlCreateButton("LogOff", 250, 15, 100, 30, $WS_GROUP) ;Créer un boutton
$Input3 = GUICtrlCreateInput("", 0, 60, 374, 70)
GUISetState(@SW_SHOW)
Local $nMsg, $Buttoneteindre, $Buttonredemarrer, $Buttonfermersession
While 1
$nMsg = GUIGetMsg(1)
Select
Case [color=#FF0000]$nMsg[0] = [/color]$GUI_EVENT_CLOSE
If $nMsg[1] = $Form2 Then ; fenêtre fille
GUIDelete($Form2) ; on ferme la fenêtre fille
Else ; fenêtre principale
Exit ; on se barre
EndIf
Case [color=#FF0000]$nMsg[0] = [/color]$Buttoneteindre
; run(@ComSpec & ' /c shutdown -f -s -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Extinction du système distant", "Le système distant va s'éteindre")
Case [color=#FF0000]$nMsg[0] = [/color]$Buttonredemarrer
; run(@ComSpec & ' /c shutdown -f -r -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Redemarrage du système distant", "Le système distant va redemarrer")
Case [color=#FF0000]$nMsg[0] = [/color]$Buttonfermersession
; run(@ComSpec & ' /c shutdown -f -l -m \\' &$rinput&' -c '& $Input3, @SystemDir, @SW_HIDE )
MsgBox( 0, "Fermeture de session", "La session distante va se fermer")
EndSelect
Sleep(10)
WEnd
Re: [..] Fermeture d'une GUI
Posté : mer. 02 nov. 2011 14:15
par XeniOne
Merci de ta réponse =)
J'allais répondre justement pour dire que j'avais trouvé ^^ (et c'est tout à fait ce que tu as mis)
J'ai pas totalement compris pourquoi mais bon...au moins ça fonctionne!
Merci encore!
Re: [..] Fermeture d'une GUI
Posté : jeu. 12 sept. 2019 13:06
par littlechiki
Bonjour,
Je up le sujet parce que ça fait quand même 8 ans que le sujet a eu le dernier up et vous demande si vous avez une solution qui serait à la page.
(ça a plus l'air de marcher en 2019)
donc voilà mon code :
#include <WindowsConstants.au3>#include <GUIConstantsEx.au3>$gui = GUICreate("Ma GUI",500,500)$button = GUICtrlCreateButton("Affichage",100,100,130,40)$gui2 = GUICreate("Ma GUI 2",300,300)GUISetState(@SW_SHOW,$gui)While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE If $gui Then Exit Else GUISetState(@SW_HIDE,$gui2) EndIf Case $button GUISetState(@SW_SHOW,$gui2) EndSwitchWEnd
Quelqu'un aurait une solution pour moi s'il vous plaît ? Merci d'avance !
Re: [..] Fermeture d'une GUI
Posté : jeu. 12 sept. 2019 17:35
par Tlem
Bonjour. Voilà la solution pour votre cas :
Code : Tout sélectionner
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
$gui = GUICreate("Ma GUI", 500, 500)
$button = GUICtrlCreateButton("Affichage", 100, 100, 130, 40)
$gui2 = GUICreate("Ma GUI 2", 300, 300, -1, -1, -1, -1, $gui)
GUISetState(@SW_SHOW, $gui)
While 1
$nMsg = GUIGetMsg(1)
Select
Case $nMsg[0] = $GUI_EVENT_CLOSE
If $nMsg[1] = $gui2 Then
GUISetState(@SW_hide, $gui2)
Else
Exit
EndIf
Case $nMsg[0] = $button
GUISetState(@SW_SHOW, $gui2)
EndSelect
WEnd
Pour la Gui2, j'ai rajouté le flag 'parent' afin que la fenêtre fille ne soit pas masquée par inadvertance.
Pour le reste cela avait déjà été indiqué (plus ou moins) dans les messages précédent. Il suffisait d'adapter.
Cordialement
Re: [..] Fermeture d'une GUI
Posté : ven. 13 sept. 2019 12:29
par littlechiki
Ah il me suffisait d'un Select alors ! bah merci du coup, j'aurais pas pu trouver ! j'ai testé et ça marche pour mon application, merci !