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