[..] Fermeture d'une GUI

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
XeniOne
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 27 sept. 2011 06:56
Status : Hors ligne

[..] Fermeture d'une GUI

#1

Message par XeniOne » mar. 25 oct. 2011 12:31

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.
Modifié en dernier par XeniOne le mar. 25 oct. 2011 14:16, modifié 1 fois.

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Fermeture une GUI

#2

Message par ani » mar. 25 oct. 2011 12:46

while 2 → while 1
exit → winclose("Choix du shutdown")

doit exister une autre maniere pour fermer cette fenêtre.

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5885
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fermeture une GUI

#3

Message par mikell » mar. 25 oct. 2011 13:05

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]
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

XeniOne
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 27 sept. 2011 06:56
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#4

Message par XeniOne » mar. 25 oct. 2011 14:21

@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 ^^

Avatar du membre
moi
Niveau 7
Niveau 7
Messages : 370
Enregistré le : sam. 09 juil. 2011 21:14
Localisation : devant sont ordinateur
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#5

Message par moi » mar. 25 oct. 2011 15:14

Code : Tout sélectionner

If WinActive("ma fenetre 1") Then
                GUIDelete($fotmmafenetre1)
            ElseIf WinActive("ma fenetre 2l") Then
                GUIDelete($fotmmafenetre2)
EndIf
?
le problème ce n'est pas un problème, le seul problème ici c'est nous.

j'aime NYAN CAT Image

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#6

Message par GaRydelaMer » mar. 25 oct. 2011 16:01

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
 

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5885
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#7

Message par mikell » mar. 25 oct. 2011 20:59

Merci Gary mais pour la compréhension je crois qu'il vaut mieux faire simple :roll:

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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#8

Message par GaRydelaMer » mer. 26 oct. 2011 08:35

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 :P

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5885
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#9

Message par mikell » mer. 26 oct. 2011 12:59

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 ? :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#10

Message par GaRydelaMer » mer. 26 oct. 2011 13:04

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.

XeniOne
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 27 sept. 2011 06:56
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#11

Message par XeniOne » mer. 26 oct. 2011 15:34

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.... --"

GaRydelaMer
Modérateur
Modérateur
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#12

Message par GaRydelaMer » mer. 26 oct. 2011 15:41

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

Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 13:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#13

Message par PandiPanda » mer. 26 oct. 2011 21:33

sinon à la place du guiGetMsg() y'a toujours l'alternative avec GUICtrlSetOnEvent()
► Afficher le texteExemple ^^
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie

XeniOne
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 27 sept. 2011 06:56
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#14

Message par XeniOne » mer. 02 nov. 2011 13:30

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

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5885
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#15

Message par mikell » mer. 02 nov. 2011 14:12

► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

XeniOne
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 27 sept. 2011 06:56
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#16

Message par XeniOne » mer. 02 nov. 2011 14:15

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!

littlechiki
Niveau 3
Niveau 3
Messages : 39
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#17

Message par littlechiki » jeu. 12 sept. 2019 12:06

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)
        EndSwitch
WEnd
Quelqu'un aurait une solution pour moi s'il vous plaît ? Merci d'avance !

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11446
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#18

Message par Tlem » jeu. 12 sept. 2019 16:35

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
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é".

littlechiki
Niveau 3
Niveau 3
Messages : 39
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Re: [..] Fermeture d'une GUI

#19

Message par littlechiki » ven. 13 sept. 2019 11:29

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 !

Répondre