[R] Script et GUI ne répondent plus

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
djbj90
Niveau 1
Niveau 1
Messages : 1
Enregistré le : ven. 19 avr. 2013 17:31
Status : Hors ligne

[R] Script et GUI ne répondent plus

#1

Message par djbj90 »

Bonjour à tous,

j'ai commencé AutoIt ce matin (et j'aime beaucoup) et je me trouve dans un soucis pour lequel je ne trouve pas de réponse.

J'ai consulté la doc mais à vrai dire j'ai surement cherché au mauvais endroit.


Donc je me trouve avec un petit programme qui fait pas grand chose :
- Lance deux .exe en HIDE.
- Créer un GUI qui permet de restore/hide les deux fenêtres(ou processus) associées à ces .exe


Voici le code en simplifié :

Code : Tout sélectionner


; Lancement des deux .exe
$WORLD = Run(@ScriptDir & "\Core\WorldLServer Extasis.exe", @ScriptDir & "\Core\", @SW_HIDE)
$MAIN = Run(@ScriptDir & "\Core\MainLServer 496.exe", @ScriptDir & "\Core\", @SW_HIDE)
Sleep(500)

;Creation de la GUI
$GUI = GUICreate("Manager", 450, 600, @DesktopWidth - 450) ; elle est grande car en réalité j'ai 8.exe

$WORLDLABEL = GUICtrlCreateLabel("World server", 355, 380, 70)
$SHOWWORLD = GUICtrlCreateButton("Show", 335, 400, 50, 30)
$HIDEWORLD = GUICtrlCreateButton("Hide", 385, 400, 50, 30)


$MAINLABEL = GUICtrlCreateLabel("Main Server", 35, 535, 70)
$SHOWMAIN = GUICtrlCreateButton("Show", 15, 555, 50, 30)
$HIDEMAIN = GUICtrlCreateButton("Hide", 65, 555, 50, 30)


GUISetState(@SW_SHOW)

;Deroulement

      While 1
        $MSG = GUIGetMsg()
        Switch $MSG
            Case $GUI_EVENT_CLOSE
                Exit
            
            Case $SHOWWORLD
                $WINDOW = GETWINDOWFROMPID($WORLD)
                WinSetState($WINDOW, "", @SW_SHOW)

            Case $HIDEWORLD
                $WINDOW = GETWINDOWFROMPID($WORLD)
                WinSetState($WINDOW, "", @SW_HIDE)

            Case $SHOWMAIN
                $WINDOW = GETWINDOWFROMPID($MAIN)
                WinSetState($WINDOW, "", @SW_SHOW)

            Case $HIDEMAIN
                $WINDOW = GETWINDOWFROMPID($MAIN)
                WinSetState($WINDOW, "", @SW_HIDE)

            EndSwitch
    WEnd


;La fonction GETHWNDFROMPID pour les curieux

Func GETWINDOWFROMPID($PID)
    $HWND = 0
    $STPID = DllStructCreate("int")
    Do
        $WINLIST2 = WinList()
        For $I = 1 To $WINLIST2[0][0]
            If $WINLIST2[$I][0] <> "" Then
                DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $WINLIST2[$I][1], "ptr", DllStructGetPtr($STPID))
                If DllStructGetData($STPID, 1) = $PID Then
                    $HWND = $WINLIST2[$I][1]
                    ExitLoop
                EndIf
            EndIf
        Next
        Sleep(100)
    Until $HWND <> 0
    Return $HWND
EndFunc

 
Voila, donc à partir de ça, tout marche, j'ai ma petite fenêtre avec mes show/hide et quand je clic les autres fenêtres apparaissent et disparaissent.

Le problème est :
-> Quand je show une fenêtre, et que je la ferme par sa croix rouge, mon script se bloque, et ma GUI ne réponds plus (impossible de show/hide les autres, et même de fermer la GUI par sa croix rouge).

Comment cela ce fait-il ? Y a t'il des solutions ?

Merci de vos réponses, et désolé si mon code n'est pas propre :S
Modifié en dernier par djbj90 le dim. 21 avr. 2013 17:11, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Script et GUI ne répondent plus

#2

Message par mikell »

Dans mon test le blocage ne s'installe que si tu cliques le bouton show/hide d'une fenêtre que tu as fermée
C'est logique ake dans ce cas dans GETWINDOWFROMPID le handle étant introuvable tu ne sors jamais de la boucle
Vive la gestion d'erreur !
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre