Aide et conseils concernant AutoIt et ses outils.
pierrotm777
Membre émérite
Messages : 770 Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status :
Hors ligne
#1
Message
par pierrotm777 » mar. 22 mars 2011 19:48
Bonjour,
J'ai un script qui fonctionne trés bien lorsqu'il est lancé après un programme qu'il écoute en permanence .
Si je le lance avant , je le fais patienter dans une boucle qui test le démarrage de ce programme, et lorsque ce programme est actif je souhaite que mon script redémarre de lui-même à son début sans sortir !
J'ai donc essayé cette solution sans succès:
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$rr = "NIL"
$F = WinExists("MonProgramme")
If $F = 1 Then
$rr = ObjCreate("RideRunner.SDK")
EndIf
$Timer = TimerInit()
While $F = 0
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
$diff = TimerDiff($Timer)
if $diff>2000 then
If $F = 1 Then _Restart_Prg()
$debut = TimerInit()
EndIf
Wend
While $F = 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Wend
Func _Restart_Prg()
If @Compiled Then
ShellExecute(@scriptdir&"\"&@ScriptName)
Else
ShellExecute(@scriptdir&"\"&@ScriptName,"", @AutoItExe)
EndIf
Exit
EndFunc
ainsi que cette autre solution toujours sans succés:
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$rr = "NIL"
$F = WinExists("MonProgramme")
If $F = 1 Then
$rr = ObjCreate("RideRunner.SDK")
EndIf
While 1
$nMsg = GUIGetMsg()
If $F = 1 Then _Restart_Prg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Wend
Func _Restart_Prg()
If @Compiled Then
ShellExecute(@scriptdir&"\"&@ScriptName)
Else
ShellExecute(@scriptdir&"\"&@ScriptName,"", @AutoItExe)
EndIf
Exit
EndFunc
Merci de votre aide par avance
Modifié en dernier par
pierrotm777 le mer. 23 mars 2011 07:20, modifié 1 fois.
roselito13
Niveau 4
Messages : 93 Enregistré le : ven. 07 août 2009 23:39
Localisation : Entre le Pôle Nord et le Pôle Sud
Status :
Hors ligne
#2
Message
par roselito13 » mar. 22 mars 2011 19:52
Mes une "While 1" des le debut du script, là ou tu veux reprendre
Et mes le "Wend" dans la condition, pas tester mais sa devrais marcher en théorie
noman
Niveau 3
Messages : 36 Enregistré le : lun. 08 déc. 2008 01:08
Status :
Hors ligne
#3
Message
par noman » mar. 22 mars 2011 22:34
Bonsoir,
Peut être que la fonction ProcessExists pourrais vous aider.
L'exemple ci-dessous montre simplement une boucle qui va vérifier si le processus mon_app.exe existe, puis éxécute la fonction _InitScript('paramètre') et quitte la boucle.
Exemple :
Code : Tout sélectionner
While1
Sleep(100)
If ProcessExists('mon_app.exe') Then
MsgBox(0, '', 'processus mon_app.exe trouvé')
_InitScipt('paramètre')
ExitLoop
EndIf
WEnd
Func _InitScript('paramètre')
;le code de votre application
EndFunc
Bonne soirée
...
jchd
AutoIt MVPs (MVP)
Messages : 2284 Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status :
Hors ligne
#4
Message
par jchd » mar. 22 mars 2011 23:03
roselito13 a écrit :
Et me
t s le "Wend" dans la condition, pas test
é mais
ç a devrai
t marcher en théorie
Euh, en théorie nous sommes certains que ça ne peut se faire !
Les structures de blocs doivent être imbriquées et ne peuvent en aucun cas s'interpénétrer, au 21éme siècle.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
SagePourpre
Niveau 7
Messages : 442 Enregistré le : dim. 06 juil. 2008 09:11
Status :
Hors ligne
#5
Message
par SagePourpre » mar. 22 mars 2011 23:27
Voici à quoi devrait ressembler la forme de votre script dans ce cas
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Global _
$strTitreProgramme = "Sans titre - Bloc-notes", _
$hWnd = WinExists($strTitreProgramme), _
$boolOpen
While 1
While Not $hWnd ; équivalent de while $hWnd = 0 (juste plus beau ( avis personnel ))
$hWnd = WinExists($strTitreProgramme)
ToolTip('NON', 0, 0)
Sleep(1000)
WEnd
While $hWnd
$hWnd = WinExists($strTitreProgramme)
ToolTip('OUI', 0, 0)
Sleep(1000)
WEnd
WEnd
Même chose que le premier code, avec une légère complexification.
Dans cette seconde mouture, en plus d'effectuer des actions selon si
le programme est fermé ou ouvert, une action est faîte lorsque le programme est
fermé et lorsqu'il est ouvert.
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Global _
$strTitreProgramme = "Sans titre - Bloc-notes", _
$hWnd = WinExists($strTitreProgramme), _
$boolOpen = True
While 1
$boolOpen = Not $boolOpen
While Not $hWnd ; Programme fermé
$hWnd = WinExists($strTitreProgramme)
If $boolOpen = True Then
$boolOpen = Not $boolOpen
MsgBox(0,'Alerte','Le programme vient d''être fermé')
EndIf
ToolTip('NON', 0, 0)
Sleep(1000)
WEnd
$boolOpen = Not $boolOpen
While $hWnd
$hWnd = WinExists($strTitreProgramme)
If $boolOpen = True Then
$boolOpen = Not $boolOpen
MsgBox(0,'Alerte','Le programme vient d''être ouvert')
EndIf
ToolTip('OUI', 0, 0)
Sleep(1000)
WEnd
WEnd
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
pierrotm777
Membre émérite
Messages : 770 Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status :
Hors ligne
#6
Message
par pierrotm777 » mer. 23 mars 2011 06:07
Merci beaucoup à tous,
L'example de sagepourpre me semble correspondre le plus à mon besoin , mais je vais tester tout cela.
Merci encore !
pierrotm777
Membre émérite
Messages : 770 Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status :
Hors ligne
#7
Message
par pierrotm777 » mer. 23 mars 2011 06:59
J'ai essayé d'adapter votre exemple à mon script en y ajoutant 1 bouton mais il ne fonctionne pas.
Je pense que je place le switch au mauvais endroit !
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Global $boolOpen = True
$F = WinExists("RoadRunner")
$MainGUI = GUICreate("Skinner Tool", 500, 603, -1, -1)
$About = GUICtrlCreateButton("?", 390, 5, 25, 25)
GUISetState()
While 1
$boolOpen = Not $boolOpen
While Not $F ; Programme fermé
$F = WinExists("RoadRunner")
If $boolOpen = True Then
$boolOpen = Not $boolOpen
MsgBox(0,'Alerte','Le programme vient d''être fermé')
EndIf
ToolTip('NON', 0, 0)
Sleep(1000)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Wend
$boolOpen = Not $boolOpen
While $F ; Programme ouvert
$F = WinExists("RoadRunner")
If $boolOpen = True Then
$boolOpen = Not $boolOpen
MsgBox(0,'Alerte','Le programme vient d''être ouvert')
EndIf
ToolTip('OUI', 0, 0)
Sleep(1000)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $About
SplashTextOn("Thanks","Thanks to the French Autoit"&@CRLF&"helped me for this script ! :-)",300, 80, 99, 199, "",48,14)
sleep(3000)
SplashOff()
EndSwitch
WEnd
Wend
pierrotm777
Membre émérite
Messages : 770 Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status :
Hors ligne
#8
Message
par pierrotm777 » mer. 23 mars 2011 07:20
J'ai trouvé !
Le problème des boutons non actifs vient des sleep(1000).
Une fois enlevé , cela fonctionne trés bien
Merci beaucoup !