[..] Fermeture de AutoIt qui sort (ne sort pas du while)
Posté : dim. 14 août 2022 15:52
Bonjour à tous,
Je me retrouve dans une impasse...
Je cherche à détecter si plantage d'une application cible à qui j'ai ajouté quelques boutons pour l'automatiser mais quand je fais un clic droit dans le [gestionnaire des tâches] puis "Fin de tâche" l'application se ferme bien et là je n'arrive plus à sortir de ma boucle
Là je vois pas le problème, j'ai beau chercher je n'arrive pas à sortir de cette boucle.
Voici mon code, merci pour la lecture.
_CreateButtons()
Func _CreateButtons()
Global $Demarrage, $RAZ, $Arret, $RAZArret, $DemarrageRAZArret, $DemarrageArret, $RAZArretDemarrage, $All_Infos, _
$RAZArretDemarrageArret, $Change_Par_Le_Numero, $DemarrageRAZArretDemarrage, $DemarrageRAZArretDemarrageInfosNumero, _
$AdresseMAC, $Programmation, $RAZArretNumero, $Historique, $DemarrageRAZ, $All_Infos_Edit, $Copier, $Imprimer
GUISetState( @SW_SHOW, _TargetaddLabel( "1", 10,15,10,15) )
$Demarrage = _TargetAddButton ( "Démarrage (ON)", 20, 10, 100, 23 )
$Demarrage = $Demarrage[0]
GUISetState()
GUISetState( @SW_SHOW, _TargetaddLabel( "2", 130,15,10,15) )
$RAZ = _TargetAddButton ( "RAZ", 140, 10, 100, 23 )
$RAZ = $RAZ[0]
GUISetState()
...
EndFunc
_While()
Func _While()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Demarrage ; 1
Global $Select = "_Demarrage"
_LastAction()
Case $msg = $RAZ ; 2
Global $Select = "_RAZ"
_LastAction()
Case $msg = $Arret ; 3
Global $Select = "_Arret"
_LastAction()
Case $msg = $RAZArret ; 4
_RAZArret()
Case $msg = $DemarrageRAZArret ; 5
_DemarrageRAZArret()
Case $msg = $DemarrageArret ; 6
_DemarrageArret()
Case $msg = $RAZArretDemarrage ; 7
_RAZArretDemarrage()
Case $msg = $All_Infos ; 8
_All_Infos()
Case $msg = $RAZArretDemarrageArret ; 9
_RAZArretDemarrageArret()
Case $msg = $DemarrageRAZArretDemarrage ; B
_DemarrageRAZArretDemarrage()
Case $msg = $AdresseMAC ; D
_AdresseMAC()
Case $msg = $Programmation ; E
_Programmation()
Case $msg = $DemarrageRAZ ; H
_DemarrageRAZ()
Case $msg = $Copier ; CTRL + C
_Copier()
Case $msg = $Imprimer ; CTRL + P
_Imprimer()
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
$aMPos = MouseGetPos()
; Is the mouse in the rectangle
If Not WinActive($ChildHandle) Or _WinAPI_PtInRectEx ( $aMPos[0], $aMPos[1], $All_Infos_Edit_aPos[0], $All_Infos_Edit_aPos[1], $All_Infos_Edit_aPos[0]+$All_Infos_Edit_aPos[2], $All_Infos_Edit_aPos[1]+$All_Infos_Edit_aPos[3]) Then
If $HotKey = "1" Then
Global $HotKey = "" ; "" Désactive les fonction par les touches HotKey
_HotKey()
EndIf
Else
If $HotKey = "" Then
Global $HotKey = "1" ; "1" Active les fonction par les touches HotKey
_HotKey()
EndIf
EndIf
;~ If Not IsHWnd($ChildHandle) Then ConsoleWrite( "Line=" & @ScriptLineNumber & ", L'application à planté, AutoIt va se fermer." & @CRLF)
;~ If Not IsHWnd($ChildHandle) Then WinKill($ParentHandle)
If Not IsHWnd( $ChildHandle) Then
Winclose( $ChildHandle)
GUIDelete ( $ChildHandle)
ExitLoop
$ChildTitle = WinGetTitle("[ACTIVE]")
$ChildHandle = WinWaitActive($ChildTitle)
ConsoleWrite( "Line=" & @ScriptLineNumber & ", $ChildTitle=" & $ChildTitle & @CRLF)
ConsoleWrite( "Line=" & @ScriptLineNumber & ", $ChildHandle=" & $ChildHandle & @CRLF)
EndIf
Sleep(50)
WEnd
EndFunc
Je me retrouve dans une impasse...
Je cherche à détecter si plantage d'une application cible à qui j'ai ajouté quelques boutons pour l'automatiser mais quand je fais un clic droit dans le [gestionnaire des tâches] puis "Fin de tâche" l'application se ferme bien et là je n'arrive plus à sortir de ma boucle

Là je vois pas le problème, j'ai beau chercher je n'arrive pas à sortir de cette boucle.
Voici mon code, merci pour la lecture.
_CreateButtons()
Func _CreateButtons()
Global $Demarrage, $RAZ, $Arret, $RAZArret, $DemarrageRAZArret, $DemarrageArret, $RAZArretDemarrage, $All_Infos, _
$RAZArretDemarrageArret, $Change_Par_Le_Numero, $DemarrageRAZArretDemarrage, $DemarrageRAZArretDemarrageInfosNumero, _
$AdresseMAC, $Programmation, $RAZArretNumero, $Historique, $DemarrageRAZ, $All_Infos_Edit, $Copier, $Imprimer
GUISetState( @SW_SHOW, _TargetaddLabel( "1", 10,15,10,15) )
$Demarrage = _TargetAddButton ( "Démarrage (ON)", 20, 10, 100, 23 )
$Demarrage = $Demarrage[0]
GUISetState()
GUISetState( @SW_SHOW, _TargetaddLabel( "2", 130,15,10,15) )
$RAZ = _TargetAddButton ( "RAZ", 140, 10, 100, 23 )
$RAZ = $RAZ[0]
GUISetState()
...
EndFunc
_While()
Func _While()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Demarrage ; 1
Global $Select = "_Demarrage"
_LastAction()
Case $msg = $RAZ ; 2
Global $Select = "_RAZ"
_LastAction()
Case $msg = $Arret ; 3
Global $Select = "_Arret"
_LastAction()
Case $msg = $RAZArret ; 4
_RAZArret()
Case $msg = $DemarrageRAZArret ; 5
_DemarrageRAZArret()
Case $msg = $DemarrageArret ; 6
_DemarrageArret()
Case $msg = $RAZArretDemarrage ; 7
_RAZArretDemarrage()
Case $msg = $All_Infos ; 8
_All_Infos()
Case $msg = $RAZArretDemarrageArret ; 9
_RAZArretDemarrageArret()
Case $msg = $DemarrageRAZArretDemarrage ; B
_DemarrageRAZArretDemarrage()
Case $msg = $AdresseMAC ; D
_AdresseMAC()
Case $msg = $Programmation ; E
_Programmation()
Case $msg = $DemarrageRAZ ; H
_DemarrageRAZ()
Case $msg = $Copier ; CTRL + C
_Copier()
Case $msg = $Imprimer ; CTRL + P
_Imprimer()
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
$aMPos = MouseGetPos()
; Is the mouse in the rectangle
If Not WinActive($ChildHandle) Or _WinAPI_PtInRectEx ( $aMPos[0], $aMPos[1], $All_Infos_Edit_aPos[0], $All_Infos_Edit_aPos[1], $All_Infos_Edit_aPos[0]+$All_Infos_Edit_aPos[2], $All_Infos_Edit_aPos[1]+$All_Infos_Edit_aPos[3]) Then
If $HotKey = "1" Then
Global $HotKey = "" ; "" Désactive les fonction par les touches HotKey
_HotKey()
EndIf
Else
If $HotKey = "" Then
Global $HotKey = "1" ; "1" Active les fonction par les touches HotKey
_HotKey()
EndIf
EndIf
;~ If Not IsHWnd($ChildHandle) Then ConsoleWrite( "Line=" & @ScriptLineNumber & ", L'application à planté, AutoIt va se fermer." & @CRLF)
;~ If Not IsHWnd($ChildHandle) Then WinKill($ParentHandle)
If Not IsHWnd( $ChildHandle) Then
Winclose( $ChildHandle)
GUIDelete ( $ChildHandle)
ExitLoop
$ChildTitle = WinGetTitle("[ACTIVE]")
$ChildHandle = WinWaitActive($ChildTitle)
ConsoleWrite( "Line=" & @ScriptLineNumber & ", $ChildTitle=" & $ChildTitle & @CRLF)
ConsoleWrite( "Line=" & @ScriptLineNumber & ", $ChildHandle=" & $ChildHandle & @CRLF)
EndIf
Sleep(50)
WEnd
EndFunc