Page 1 sur 1

[..] Fermeture de AutoIt qui sort (ne sort pas du while)

Posté : dim. 14 août 2022 15:52
par Anthony
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 :shock:
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.
TMP.png

_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

Re: [..] Fermeture de AutoIt qui ne sort pas du while

Posté : dim. 14 août 2022 21:03
par mikell
If not ProcessExists(...) Then Exit :mrgreen:

à mettre dans la boucle While
Mais pourquoi le gestionnaire des tâches ? tu pourrais gérer ça directement avec un bouton dans le script, ou même à la fermeture du script, ça rendrait les choses plus faciles !

Edit
dans ta signature : le lien "http://webfreesoftware.net" est mort

Re: [..] Fermeture de AutoIt qui sort (ne sort pas du while)

Posté : lun. 15 août 2022 01:47
par Anthony
Salut mikell, comment vas-tu ?
Cela semble bien sortir oui mais ne libère pas Scite donc mon Add-on ne se ferme pas automatiquement.
Je dois forcer la sortie :(
>Process failed to respond; forcing abrupt termination...
>Exit code: 1 Time: 122.3

Pourquoi le gestionnaire des tâches ?
Car je simule un crash, l'appli plante souvent donc Scite doit détecter que l'appli à crashé pour se fermer, c'est casse bonbon mais le dev à perdu le code source :cry:

Mon site, quand la finance ira mieux :( :mrgreen:

Re: [..] Fermeture de AutoIt qui sort (ne sort pas du while)

Posté : lun. 15 août 2022 10:45
par jchd
Que vient faire SciTE là-dedans ?

Re: [..] Fermeture de AutoIt qui sort (ne sort pas du while)

Posté : lun. 15 août 2022 14:11
par Anthony
SciTE ou compilé le résultat est le même (SciTE ou compilé.exe ne se ferme pas)
TMP.png

Re: [..] Fermeture de AutoIt qui sort (ne sort pas du while)

Posté : lun. 15 août 2022 15:27
par mikell
C'est normal que SciTE ne se ferme pas, si c'est bien ça le problème... SciTE n'est qu'un éditeur et même s'il permet de lancer un script il n'a aucun rôle dans l'exécution du script
On dirait qu'il y a confusion, ce n'est pas SciTE qui "doit détecter que l'appli à crashé pour se fermer", c'est le script lui-même. Si tout se passe normalement, l'appli se ferme => le script se ferme, mais SciTE reste ouvert (et mentionne dans sa fenêtre de contrôle que le script s'est terminé)

Re: [..] Fermeture de AutoIt qui sort (ne sort pas du while)

Posté : lun. 15 août 2022 17:45
par Anthony
Voilà mikell, désolé de na pas être très clair.
Mais voilà le script ne se ferme pas et je ne trouve pas pourquoi. :?

Re: [..] Fermeture de AutoIt qui sort (ne sort pas du while)

Posté : mar. 16 août 2022 14:51
par mikell
Hmm pour moi le non-affichage du 2ème ConsoleWrite est plutôt bon signe
Si ton code est comme ça, schématiquement :

If not ProcessRxists(...) Then
   ConsoleWrite 1
   Exit
   ConsoleWrite 2
EndIf

Le script envoie le ConsoleWrite 1 à Scite qui l'affiche, puis Exit ferme le script qui ne peut donc plus envoyer le ConsoleWrite 2 à Scite, donc pas d'affichage