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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par Anthony le lun. 15 août 2022 19:17, modifié 3 fois.
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

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

#3

Message 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:
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#4

Message par jchd »

Que vient faire SciTE là-dedans ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

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

#5

Message par Anthony »

SciTE ou compilé le résultat est le même (SciTE ou compilé.exe ne se ferme pas)
TMP.png
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#6

Message 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é)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

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

#7

Message 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. :?
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#8

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