Relancer programme si fermeture inopinée

Poser vos questions de programmation en AutoHotkey
KevinH
Posts: 5
Joined: 21 Mar 2018, 05:45

Relancer programme si fermeture inopinée

23 Apr 2018, 07:54

Bonjour,

Je souhaite garder un programme ouvert en permanence mais parfois à cause de bug celui se ferme inopinément. Comment crée un script en arrière-plan qui se chargerait de contrôler si le programme est ouvert et si ce n'est pas le cas de le relancer ?

Merci d'avance,

PS: c'est génial qu'il y a une partie francophone ici je découvre ce fabuleux logiciel open source et j'espère l'utiliser souvent !

A bientôt,

Kévin
A_AhkUser
Posts: 862
Joined: 06 Mar 2017, 16:18
Location: France

Re: Relancer programme si fermeture inopinée

26 Apr 2018, 13:16

Salut KevinH,

KevinH wrote:Je souhaite garder un programme ouvert en permanence mais parfois à cause de bug celui se ferme inopinément. Comment crée un script en arrière-plan qui se chargerait de contrôler si le programme est ouvert et si ce n'est pas le cas de le relancer ?


Tu peux tirer parti d'au moins trois commandes, au choix: WinWaitClose, Process et RunWait:

Déscription des commandes:



Pour répéter d'une série de commandes tu peux opter soit pour un timer et un Loop (une boucle). Si ton script est monofonctionnel et se borne à contrôler si le programme est fermé pour, le cas échéant, le relancer, une boucle fera très bien l'affaire - voici un exemple avec le bloc-notes et en utilisant la commande RunWait et une boucle:

Code: [Select all] [Download] GeSHi © Codebox Plus

Loop
{
RunWait, C:\Windows\System32\notepad.exe ; lance le bloc-notes et attend que celui-ci se ferme avant de poursuivre
sleep, 3000 ; on attend 3 secondes (3000ms) avant de relancer le programme
MsgBox, 4,, Relancer le programme? ; affiche un messagebox avec un bouton 'oui' et un bouton 'non'
IfMsgBox No ; si le bouton 'non' a été sélectionné...
ExitApp ; ...on quitte le programme
; dans le cas contraire... la boucle se poursuit
}
KevinH
Posts: 5
Joined: 21 Mar 2018, 05:45

Re: Relancer programme si fermeture inopinée

27 Apr 2018, 07:32

Merci pour ta réponse je pense que winwaitclose peut faire l'affaire.

Dans mon cas, le logiciel bug mais le processus reste ouvert, il faut fermer de force les fenêtres, le processus puis relancer le programme en se loguant.
J'avais fait trois codes/boucles, un pour fermer le programme en cas de bug, un pour fermer le processus associé si le programme était fermé et un pour lancer le programme si le processus est correctement fermé.

Loop
{
IfWinExist, XXX,&Fermer 'boite de message suite à bug
{
WinActivate
}
else
{
WinWait, XXX,&Fermer 'boite de message suite à bug
WinActivate
}
IfWinActive, XXX
Send {ENTER}

IfWinExist, Application Error 'boite de message suite à bug
{
WinActivate
}
else
{
WinWait, Application Error,&Fermer 'boite de message suite à bug
WinActivate
}
IfWinActive, Application Error
Send {ENTER}
}

Process, Close, ntvdm.exe 'pour fermer proprement le programme

Loop
{
IfWinExist, XXX, 'si le logiciel marche normalement ne rien faire
return
else
Process, Close, ntvdm.exe 'sinon fermer le processus
}


Loop
{
Process, WaitClose, XXX.exe 'une fois le processus fermé, relancer le programme
Run, C:\XXX.EXE
}

Quand j'ai le temps j'essayerai de le toiletter pour en créer un seul et faire un sorte qu'il reste ouvert même une fois qu'il a réussi à relancer le programme. Je pense que je pourrai simplifier le code en tuant le processus dès que la première boite de message de bug apparaît. Mais là je n'ai pas le temps de me pencher dessus :oops: !
User avatar
joedf
Posts: 6439
Joined: 29 Sep 2013, 17:08
Facebook: J0EDF
Google: +joedf
GitHub: joedf
Location: Canada, Quebec
Contact:

Re: Relancer programme si fermeture inopinée

27 Apr 2018, 09:52

Je pense que c’est possible de vérifier si une application ne réponds plus avec IsHungAppWindow(hwnd)
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

Code: [Select all] [Download] GeSHi © Codebox Plus

Hwnd := WinExist(“ahk_exe ntvdm.exe“)
Frozen:=DllCall(“IsHungAppWindow”,”int”, Hwnd)
If (Frozen)
MsgBox L’application ne répond plus.
Else
MsgBox L’application répond.
A_AhkUser
Posts: 862
Joined: 06 Mar 2017, 16:18
Location: France

Re: Relancer programme si fermeture inopinée

28 Apr 2018, 09:32

joedf wrote:Je pense que c’est possible de vérifier si une application ne réponds plus avec IsHungAppWindow(hwnd)
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx


Nice joedf :thumbup:
Par contre il semble que l'autocorrect sur ton iPhone t'ait desservi sur ce coup-là :HeHe::

Code: [Select all] [Download] GeSHi © Codebox Plus

MsgBox % (a:=Asc("“")) . " = " . (b:=Asc("""")) . " ? " . ((a = b) ? "oui" : "non")
if (Hwnd:=WinExist("ahk_exe ntvdm.exe"))
Frozen:=DllCall("IsHungAppWindow","int", Hwnd)
; ...


@KevinH
Dans ce cas tu peux essayer de WinKill toutes les fenêtres du processus après les avoir ajouté à un groupe - par exemple avec notepad:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

User avatar
joedf
Posts: 6439
Joined: 29 Sep 2013, 17:08
Facebook: J0EDF
Google: +joedf
GitHub: joedf
Location: Canada, Quebec
Contact:

Re: Relancer programme si fermeture inopinée

30 Apr 2018, 10:39

lol
KevinH
Posts: 5
Joined: 21 Mar 2018, 05:45

Re: Relancer programme si fermeture inopinée

04 May 2018, 11:09

merci pour vos retours, j'ai un peu de mal à tout suivre mais je vais m'accrocher, bon week-end !
KevinH
Posts: 5
Joined: 21 Mar 2018, 05:45

Re: Relancer programme si fermeture inopinée

04 May 2018, 11:21

En fait il bug lors d'une manip précise, j'ai voulu faire une boucle qui se stoppe dans le cas où le bug apparaît mais j'ai dû me tromper dans la syntaxe puisqu'elle se faire toujours même avant la fenêtre d'erreur :headwall: , la voici:

Loop,
{
ControlClick, Button1, MELODIE ahk_class #32770,, Left, 1, NA
IfWinExist, Application Error, &Fermer,
WinClose, Application Error
break
}
Si quelqu'un est intéressé pour m'aider plus en direct, on peux échanger par netviewer ou telegram ?

Merci d'avance !
KevinH
Posts: 5
Joined: 21 Mar 2018, 05:45

Re: Relancer programme si fermeture inopinée

04 May 2018, 11:26

joedf wrote:Je pense que c’est possible de vérifier si une application ne réponds plus avec IsHungAppWindow(hwnd)
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

Code: [Select all] [Download] GeSHi © Codebox Plus

Hwnd := WinExist(“ahk_exe ntvdm.exe“)
Frozen:=DllCall(“IsHungAppWindow”,”int”, Hwnd)
If (Frozen)
MsgBox L’application ne répond plus.
Else
MsgBox L’application répond.


Merci Joe j'ai testé mais sans succès, si ça peut vous aider voici une capture d'écran: (à ne pas diffuser outre mesure c'est professionnel)
Attachments
Bug.png
(91.2 KiB) Not downloaded yet
A_AhkUser
Posts: 862
Joined: 06 Mar 2017, 16:18
Location: France

Re: Relancer programme si fermeture inopinée

05 May 2018, 01:17

Si la manip en question est la commande ControlClick suivante:

Code: [Select all] [Download] GeSHi © Codebox Plus

ControlClick, Button1, MELODIE ahk_class #32770,, Left, 1,  NA


tu peux essayer quelque chose de ce genre:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus



Dans ton code, ta boucle ne fera jamais plus d'une itération: le break est exécuté dans tout les cas. Utilise des blocs d'instruction pour faire dépendre un ensemble d'instruction d'un If (par exemple):

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus


Return to “J'ai besoin d'aide”

Who is online

Users browsing this forum: No registered users and 0 guests