J'essaye de coder un script qui ferme la session windows au bout de 55mn d'inactivité, ou qui arrête le PC si l'inactivité est détectée après 18h. Le problème c'est que si la session est fermée avant 18h, mon script ne sera plus actif pour arrêter le PC à 18h... Avez-vous une parade? ce script pourrait-il continuer à tourner après la fermeture de session windows ?
Code : Tout sélectionner
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <Constants.au3>
#include <MsgBoxConstants.au3>
#include <Timers.au3>
#include <Date.au3>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Options de la fonction à définir :
Const $dossier_logs = "C:\tmp\" ; chemin du fichier de logs
If DirGetSize($dossier_logs) = -1 Then ; création du dossier de logs s'il n'existe pas
DirCreate($dossier_logs)
EndIf
Const $logs = True ; activation/desactivation des logs
Const $nom_fichier_logs = "shutdown_logs.txt" ; chemin du fichier de logs
Const $fichier_logs = FileOpen($dossier_logs&$nom_fichier_logs,1 ) ; ouverture du fichier en lecture/ecriture
Const $tps_inactivite = 3300 ; temps d'inactivité en secondes avant arrêt du PC, 3300s = 55mn
Const $attente_bcle = 60000 ; attente en millisecondes entre chaque test d'inactivité (60000ms = 1mn)
Const $options_msg = "1+48+256+262144" ; options d'affichage pour la message box principale
Const $heure_extinction = 18 ; heure d'extinction du PC (en heures)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shutdown_session($tps_inactivite); lancement de la fonction
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Fonction shutdown_session: Arrête le PC après un délai d'inactivité de "$tps" secondes.
Func shutdown_session($tps_inactivite = 3300)
if $logs then
FileWriteLine($fichier_logs,"Lancement de shutdown_session : "&_NowCalc()) ; ajoute une ligne dans le fichier log pour le début du programme
EndIf
Local $iIdleTime = _Timer_GetIdleTime() ; temps d'inactivité en ms
While ($iIdleTime/1000) < $tps_inactivite
sleep($attente_bcle)
Local $iIdleTime = _Timer_GetIdleTime() ; temps d'inactivité en ms
WEnd ; la durée d'inactivité programmée a été dépassée
Local $msgbox = MsgBox($options_msg,"Fermeture de session","La session va se fermer dans 1 minute. Cliquez sur 'Annuler' pour annuler.",60)
if $msgbox = 2 Then ; clic sur annuler > relance la fonction shutdown_session au départ
if $logs then
FileWriteLine($fichier_logs,"Annulation de la fermeture de session : "&_NowCalc())
EndIf
shutdown_session($tps_inactivite)
Else ; pas de clic ou clic sur OK
If @HOUR>=$heure_extinction Then ; l'heure d'extinction est dépassée, arrêt complet du PC au lieu de fermeture de session
MsgBox(0,"Ok","Arret du PC imminent !",30)
sleep(30000) ; pause de 30sec
if $logs then
FileWriteLine($fichier_logs,"Arrêt forcé du PC : "&_NowCalc())
EndIf
shutdown(5) ; arrêt forcé du PC
Else
MsgBox(0,"Ok","Fermeture de session imminente !",30)
sleep(30000) ; pause de 30sec
if $logs then
FileWriteLine($fichier_logs,"Fermeture de session : "&_NowCalc())
EndIf
shutdown(0) ; arrêt forcé de la session
EndIf
EndIf
EndFunc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;