Bon, avec un peut de temps et quelques tests, voici pour moi le script final

:
► Afficher le texteWeek Timer
Code : Tout sélectionner
#include <Date.au3>
#Include '_Adlib.au3'
#NoTrayIcon
HotKeySet("{ESC}","Exit_ESC") ; Pour arreter le script en cas de besoin
Global $nbM = 0, $nbC = 0, $Timer = 0
Local $window = "Fenetre_Prog"
$LogFile = "MonScript.log"
While 1
If @WDAY > 1 And @WDAY < 7 Then ; Du lundi au vendredi
If @HOUR & @MIN >= 0710 And @HOUR & @MIN <= 1730 Then ; Test de la plage horaire.
BlockInput(1) ; Verouillage du clavier et de la souris
If $nbC = 0 Then ; Action à exécuter une seule fois si $nbC=0
If MonProgActif() Then ; Si la fenêtre est bien détectée (MonProgActif()=1)
;
; Votre Action Ici
;
$nbC = 1 ; Pour ne pas ré-executer le code.
Else
FileWriteLine($LogFile, "L'action X n'à pas pu être exécutée le " & _NowDate() & " à " & _NowTime() & @CRLF) ; Fichier LOG
$nbC = 1 ; Pour éviter de boucler le test (l'action sera relancée lors de la prochaine plage horaire).
EndIf
EndIf
If $Timer = 0 Then ; On regarde si les timers ont été activés.
_AdlibEnable("Action40Mn", 2400000) ; Action d'exécution toute les 40 mn (2400000 ms)
_AdlibEnable("Action02Mn", 120000) ; Action d'exécution toute les 02 mn (120000 ms)
$Timer = 1 ; Flag pour ne pas réactiver les timers à chaque tour de boucle.
EndIf
Else
BlockInput(0)
_AdlibDisable() ; Désactivation des deux timer.
$Timer = 0 ; Flag pour signaler que les timers sont désactivés.
$nbC = 0 ; Remise à zéro du compteur pour la prochaine exécution
EndIf
Else
BlockInput(0)
EndIf
Sleep(500) ; Petite pause pour soulager le CPU.
wend
Func Action40Mn() ; Fonction à exécuté toutes les 40Mn
If MonProgActif() Then
;
; Code
;
Else
FileWriteLine($LogFile, "L'action 40mn n'à pas pu être exécutée le " & _NowDate() & " à " & _NowTime() & @CRLF) ; Fichier LOG
EndIf
EndFunc
Func Action02Mn() ; Fonction à exécuté toutes les 02Mn
If MonProgActif() Then
;
; Code
;
Else
FileWriteLine($LogFile, "L'action 02mn n'à pas pu être exécutée le " & _NowDate() & " à " & _NowTime() & @CRLF) ; Fichier LOG
EndIf
EndFunc
Func MonProgActif()
Local $Res = 0
If WinExists($window) Then ; Si la fenêtre existe
WinActivate($window, "") ; Focus sur la fenêtre
$Res = WinActive($window, "") ; Vérifie que la fenêtre du prog à le focus.
EndIf
Return $Res
EndFunc
Func Exit_ESC()
Exit 0
EndFunc
Si les actions ne sont pas exécutées, il se peut qu'il y ait un problème sur la fonction
MonProgActif(). Il faut que cette fonction renvoie 1 pour que les autres fonctions puissent être exécutées car si votre appli n'est pas active, je suppose que le timer n'a pas d'intérêt.
J'ai modifié légèrement la fonction au cas ou ...
En ce qui concerne l'écriture du fichier de log, je n'ai eu aucun problèmes.
Il est inutile d'utiliser le
FileOpen car le
FileWriteLine sait gérer l'ouverture et la fermeture du fichier tout seul.
Voilà, à vous de me dire si ça fonctionne comme vous le désirez.
Edit : J'ai mis à jour l'UDF _Adlib.au3 pour résoudre un problème de déclaration de variable (rien de méchant).