[..]Problème script "PC démarré depuis" Win7 / Win10

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

[..]Problème script "PC démarré depuis" Win7 / Win10

#1

Message par corrs78 »

Bonjour,

j'ai un problème sur un script que je n'ai pas écrit. le but de ce script est de savoir depuis combien de temps est démarrée la machine de l'utilisateur. Si elle est démarrée depuis plus de 5 jours, je lui impose un redémarrage (pour des raisons particulières).
Ce script fonctionne très bien sur Windows 7 Pro, or je migre petit à petit mes PC sous Windows 10 ; sur cet OS le script réagit anormalement.

Aujourd'hui par exemple j'ai démarré mon PC, et quelques secondes après le script m'a affiché que mon PC etait démarré depuis plus de 6 jours -> donc redémarrage.

je ne comprends pas bien ce comportement.

Merci à vous.

Code : Tout sélectionner

;FONCTION DEMARRE DEPUIS ...
Func _ComputerGetOSs()
    Local $colItems, $objWMIService, $objItem, $i = 1
    Local $aOSInfo[1]

    $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    If(Not(IsObj($objWMIService))) Then Return $aOSInfo
    $colItems = $objWMIService.ExecQuery("SELECT Name, BuildNumber, LastBootUpTime, SerialNumber FROM Win32_OperatingSystem", "WQL", 0x10 + 0x20)

    If IsObj($colItems) Then
        For $objItem In $colItems
            ReDim $aOSInfo[UBound($aOSInfo) + 1]
            $aOSInfo[$i] = __StringToDate($objItem.LastBootUpTime)
            $i += 1
        Next
        $aOSInfo[0] = UBound($aOSInfo) - 1
        If $aOSInfo[0] < 1 Then
            SetError(1, 1, 0)
        EndIf
    Else
        SetError(1, 2, 0)
    EndIf
    Return $aOSInfo
EndFunc ;_ComputerGetOSs

Func __StringToDate($dtmDate)
    Return (StringMid($dtmDate, 5, 2) & "/" & _
            StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
            & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
EndFunc

Func InverserMoisJour($Texte)
    Return StringMid($Texte, 4, 2) & "/" & StringMid($Texte, 1, 2) & StringTrimLeft($Texte, 5)
EndFunc

Func TimeGetLongFormatBySec($Sec)
    Local $Retour = ""
    Local $Temp
    Local $Compare = 60*60*24

    If($Sec > $Compare Or $Retour <> "") Then
        $Temp = Floor($Sec/($Compare))
        $Retour &= $Temp & " jour"
			; SI PC demarré depuis plus de 3 jours alors popup redemarrage impératif.

				if $Temp >= 5    Then
					MsgBox(16,"ATTENTION !!!","Votre ordinateur n'a pas été redémarré depuis plus de "&$Temp&" jours." & @CRLF _
					& " VOUS DEVEZ IMPERATIVEMENT LE REDEMARRER" &@CRLF &	@CRLF _
					&"Veuillez fermer vos travaux en cours et cliquez sur ""OK""")
					;Shutdown(6)
				EndIf
        If($Temp > 1) Then
            $Retour &= "s"
        EndIf
        $Retour &= " "
        $Sec -= $Temp*$Compare
    EndIf
    $Compare = 60*60
    If($Sec > $Compare Or $Retour <> "") Then
        $Temp = Floor($Sec/($Compare))
        $Retour &= $Temp & " heure"
        If($Temp > 1) Then
            $Retour &= "s"
        EndIf
        $Retour &= " "
        $Sec -= $Temp*$Compare
    EndIf
    $Compare = 60
    If($Sec > $Compare Or $Retour <> "") Then
        $Temp = Floor($Sec/($Compare))
        $Retour &= $Temp & " minute"
        If($Temp > 1) Then
            $Retour &= "s"
        EndIf
        $Retour &= " "
        $Sec -= $Temp*$Compare
    EndIf
    $Compare = 1
;~     If($Sec > $Compare Or $Retour <> "") Then
;~         $Temp = Floor($Sec/($Compare))
;~         $Retour &= $Temp & " seconde"
;~         If($Temp > 1) Then
;~             $Retour &= "s"
;~         EndIf
;~         $Retour &= " "
;~         $Sec -= $Temp*$Compare
;~     EndIf
    Return $Retour
EndFunc

Func GetSecByStringDate($time)
    Return  Number(StringMid($time, 7, 4))*31536000 + _
            Number(StringLeft($time, 2))*86400 + _
            Number(StringMid($time, 4, 2))*2678400 + _
            Number(StringMid($time, 12, 2))*3600 + _
            Number(StringMid($time, 15, 2))*60 + _
            Number(StringRight($time, 2))
EndFunc
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: [..]Problème script "PC démarré depuis" Win7 / Win10

#2

Message par jchd »

Une solution possible (non testée) : https://www.autoitscript.com/forum/topi ... windows10/
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#3

Message par corrs78 »

je vais tester ça. merci.
je reviens vers vous très vite

Edit :
bon j'ai essayé, avec ça : j'ai la meme incohérence,
j'ai démarré mon PC ce matin , il m'affiche 149h :shock:

Code : Tout sélectionner

#include <WinAPISys.au3>
#include <WinAPIMisc.au3>

Local $Uptime = _WinAPI_StrFromTimeInterval(_WinAPI_GetTickCount64())
MsgBox(0, '', "PC Uptime ==> " & $UpTime)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#4

Message par Tlem »

Bonsoir.

Que donne ce code chez vous ?

Code : Tout sélectionner

#include <Date.au3>

Local $colItems = ""
Local $Output = ""
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_OperatingSystem", "WQL", 0x30)

If IsObj($colItems) Then
   For $objItem In $colItems
      $LastBootUp = WMIDateStringToDate($objItem.LastBootUpTime)
      $LocalDateTime = WMIDateStringToDate($objItem.LocalDateTime)

	  $Output &= "Date du système     = " & $LocalDateTime & @CRLF
	  $Output &= "Dernier démarrage = " & $LastBootUp & @CRLF & @CRLF
	  $Output &= "Système démarré depuis : " & @CRLF

      $Output &= @TAB & "En jours   : " & @TAB & _DateDiff("D", $LastBootUp, $LocalDateTime) & @CRLF
      $Output &= @TAB & "En heures  : " & @TAB & _DateDiff("h", $LastBootUp, $LocalDateTime) & @CRLF
      $Output &= @TAB & "En minutes : " & @TAB & _DateDiff("n", $LastBootUp, $LocalDateTime) & @CRLF
      If MsgBox(1, "Retour WMI", $Output) = 2 Then ExitLoop
   Next
Else
   MsgBox(0, "Retour WMI", "Pas d'objets WMI trouvé pour la class: " & "Win32_OperatingSystem")
EndIf


Func WMIDateStringToDate($dtmDate)

   Return (StringMid($dtmDate, 1, 4) & "/" & _
         StringMid($dtmDate, 5, 2) & "/" & _
         StringMid($dtmDate, 7, 2) & _
         " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
EndFunc  ;==>WMIDateStringToDate
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#5

Message par corrs78 »

Tlem a écrit : jeu. 14 sept. 2017 22:38 Bonsoir.

Que donne ce code chez vous ?

Code : Tout sélectionner

#include <Date.au3>

Local $colItems = ""
Local $Output = ""
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_OperatingSystem", "WQL", 0x30)

If IsObj($colItems) Then
   For $objItem In $colItems
      $LastBootUp = WMIDateStringToDate($objItem.LastBootUpTime)
      $LocalDateTime = WMIDateStringToDate($objItem.LocalDateTime)

	  $Output &= "Date du système     = " & $LocalDateTime & @CRLF
	  $Output &= "Dernier démarrage = " & $LastBootUp & @CRLF & @CRLF
	  $Output &= "Système démarré depuis : " & @CRLF

      $Output &= @TAB & "En jours   : " & @TAB & _DateDiff("D", $LastBootUp, $LocalDateTime) & @CRLF
      $Output &= @TAB & "En heures  : " & @TAB & _DateDiff("h", $LastBootUp, $LocalDateTime) & @CRLF
      $Output &= @TAB & "En minutes : " & @TAB & _DateDiff("n", $LastBootUp, $LocalDateTime) & @CRLF
      If MsgBox(1, "Retour WMI", $Output) = 2 Then ExitLoop
   Next
Else
   MsgBox(0, "Retour WMI", "Pas d'objets WMI trouvé pour la class: " & "Win32_OperatingSystem")
EndIf


Func WMIDateStringToDate($dtmDate)

   Return (StringMid($dtmDate, 1, 4) & "/" & _
         StringMid($dtmDate, 5, 2) & "/" & _
         StringMid($dtmDate, 7, 2) & _
         " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
EndFunc  ;==>WMIDateStringToDate
Avec les 2 méthodes que j'ai trouvé sur le forum US, j'obtiens toujours ce résultat.
Je viens d'arrêter ma machine, au démarrage j'obtiens cela :
Image
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#6

Message par Tlem »

Donc après redémarrage le code fonctionne. ^^

Envoyé de mon SM-N9005 en utilisant Tapatalk

Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#7

Message par corrs78 »

Tlem a écrit : mer. 20 sept. 2017 21:29 Donc après redémarrage le code fonctionne. ^^

Envoyé de mon SM-N9005 en utilisant Tapatalk
justement non, c'est exactement le meme résultat, il me dit que l'ordinateur est démarré depuis 2 jours alors que je viens seulement de le démarrer :roll:
curieux
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#8

Message par orax »

Et avec ces commandes... ?

systeminfo | find "démarrage"

wmic OS GET LastBootUpTime

Code : Tout sélectionner

C:\>wmic OS GET LastBootUpTime
LastBootUpTime
20170920215709.496418+120

C:\>systeminfo | find "démarrage"
Heure de démarrage du système:              20/09/2017, 21:57:09
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#9

Message par Tlem »

corrs78 a écrit : mer. 20 sept. 2017 21:47il me dit que l'ordinateur est démarré depuis 2 jours alors que je viens seulement de le démarrer :roll:
curieux
Hummmm ça sent l'extinction hybride. Je pense que votre PC ne fait pas un redémarrage complet, il doit y avoir une sorte de mise en veille.
Même si c'est quelque chose de pas standard, fermez toutes vos applications et débranchez en live la prise du PC. Rebranchez, puis redémarrez.
Si le problème persiste, c'est que votre Windows a un gros problème car le système n'arrive probablement pas à mettre à jour la date de redémarrage, ou peut être un problème avec la pile du PC, voir un virus qui modifie ou fait croire au système qu'il a démarré deux jours avant ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#10

Message par corrs78 »

Tlem a écrit : mer. 20 sept. 2017 22:21
corrs78 a écrit : mer. 20 sept. 2017 21:47il me dit que l'ordinateur est démarré depuis 2 jours alors que je viens seulement de le démarrer :roll:
curieux
Hummmm ça sent l'extinction hybride. Je pense que votre PC ne fait pas un redémarrage complet, il doit y avoir une sorte de mise en veille.
Même si c'est quelque chose de pas standard, fermez toutes vos applications et débranchez en live la prise du PC. Rebranchez, puis redémarrez.
Si le problème persiste, c'est que votre Windows a un gros problème car le système n'arrive probablement pas à mettre à jour la date de redémarrage, ou peut être un problème avec la pile du PC, voir un virus qui modifie ou fait croire au système qu'il a démarré deux jours avant ...
ok je teste ça demain pour la veille hybride je ne pense pas car c'est un vieux PC Fixe et je vois bien le Bios quand je le démarre. En fait j'ai ce problème qu'avec Windows10 et Windows 2012 server. avec Windows7 aucun souci, sur les memes machines.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#11

Message par Tlem »

Si vous faites plusieurs essais, est-ce que l'heure du dernier démarrage change lorsque que vous testez après avoir redémarré ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#12

Message par corrs78 »

Suite à vos messages j'ai fait plusieurs tests et en effet, vos différentes commandes donnent toutes le même résultat que mes scripts autoit d'origine.
En fait c'est bien le "timer" de windows qui ne se réinitialise pas quand on ARRETE le PC.
Par contre si je redémarre le PC ça redémarre bien à zéro.
(J'ai vérifié dans les paramètre d'alimentation, je n'ai aucun type de veille activé) c'est vraiment très curieux, surtout que ça touche seulement Windows10.

Conclusion, je n'ai pas de moyen pour forcer mes utilisateurs à redémarrer leur ordinateur automatiquement sur W10. Car ceux qui éteignent leur PC tous les jours (sur Win10) sont aussi considérés comme des utilisateurs qui ne le font pas :|

EDIT :
Le problème viendrait de l'option FastStartup
https://social.technet.microsoft.com/Fo ... progeneral

me reste plus qu'à désactiver ça sur tout mon parc (500 machines) j'espère que je vais pouvoir faire cela via Autoit et que l'UAC va pas encore me casser les noisettes . A suivre...
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#13

Message par corrs78 »

Finalement je ne peux pas toucher à cette option de Windows10, je vais devoir contourner le problème.
Mon objectif est que mes utilisateurs Arrêtent/Redémarrent au moins une fois pas semaine leur PC.

Avant dès qu'il ouvrait un programme Autoit (qu'ils doivent exécuter régulièrement pour maintenance.), si le PC etait UP depuis plus de 5 jours je forçais le redémarrage. Malheureusement ceci ne fonctionne plus avec W10.

j'avais pensé à créer un fichier à chaque ouverture de session avec la date inscrite à l'intérieur et faire un dateDiff.

Avez-vous d'autres pistes de reflexion ?

Merci
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#14

Message par jguinch »

Quelques infos ici : http://www.winhelponline.com/blog/incor ... i-refresh/
L'idée est de réinitialiser la couche WMI à chaque arrêt de la machine via un script de fermeture de session (voir par partie "Create a Batch File and Run as a Shutdown Script (Windows Pro Editions and higher)").

Edit : est-ce que tu peux essayer ce script PowerShell ? : https://www.verboon.info/2014/01/powers ... formation/
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#15

Message par overflow »

pkoi ne pas juste sauvegarder la date a chaque lancement du prog autoit et quand ca depasse 5 jour on reboot ?
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#16

Message par corrs78 »

jguinch a écrit : mar. 09 janv. 2018 20:31 Quelques infos ici : http://www.winhelponline.com/blog/incor ... i-refresh/
L'idée est de réinitialiser la couche WMI à chaque arrêt de la machine via un script de fermeture de session (voir par partie "Create a Batch File and Run as a Shutdown Script (Windows Pro Editions and higher)").

Edit : est-ce que tu peux essayer ce script PowerShell ? : https://www.verboon.info/2014/01/powers ... formation/
je teste ça demain, et je reviens vers toi. Merci
(en espérant ne pas avoir de souci d'élévation de pouvoir)
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#17

Message par corrs78 »

overflow a écrit : dim. 21 janv. 2018 21:41 pkoi ne pas juste sauvegarder la date a chaque lancement du prog autoit et quand ca depasse 5 jour on reboot ?
c'est pas une mauvaise idée, mais ça ne répond pas vraiment au problème.
Le but étant de faire redémarrer WIndows ou du moins forcer mes utilisateurs à arreter leur PC.
Avec ton idée, même si la personne arrête régulièrement son PC, si il lance la boite d'outils (scripts) qu'une fois pas semaine il sera quand meme focé de redémarrer. Voilà pourquoi je veux absolument savoir depuis combien de temps est démarrer l'OS.

Bonne soirée.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#18

Message par Tlem »

Plus simplement, pourquoi ne pas faire cette sauvegarde de date au démarrage de Windows ?
Une tâche système (donc invisible) et pour pas risquer d'offusquer un quelconque AV, une simple commande Batch. ^^

Votre script de maintenance ira lire ce fichier et si la date est > à 5 jours, alors on reboot. ^^
Encore mieux :Vous pourriez créer une tache unique qui redémarrera le PC en dehors des heures de bureau. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#19

Message par corrs78 »

Tlem a écrit : lun. 22 janv. 2018 02:11 Plus simplement, pourquoi ne pas faire cette sauvegarde de date au démarrage de Windows ?
Une tâche système (donc invisible) et pour pas risquer d'offusquer un quelconque AV, une simple commande Batch. ^^

Votre script de maintenance ira lire ce fichier et si la date est > à 5 jours, alors on reboot. ^^
Encore mieux :Vous pourriez créer une tache unique qui redémarrera le PC en dehors des heures de bureau. ^^
Bonne idée, merci.
sachant que j'ai déjà un script autoit lancé par la GPO à chaque démarrage de mes PC, je pourrais très bien le faire via ce script avec les fonction _Now et _DateDiff.
je vais plancher sur le sujet.

edit: finalement j'ai fait encore plus simple :

Code : Tout sélectionner

Local $Jour_Diff = (@YDAY - $JourDeDemarrage)
je fais une différence de jour en me basant sur le quantième de l'année
Au démarrage du PC j'écris le quantième de l'année dans un fichier sur le client.
Lorsque le script de maintenance est executé par l'utilisateur, si la différence de jour est supérieure à 5 jours force le redémarrage du PC. (C'est pas super précis, mais ça me va).
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Problème script "PC démarré depuis" Win7 / Win10

#20

Message par Tlem »

Bonsoir.
Je pense que votre méthode, risque de poser problème dans certains cas. Par exemple, si le PC est allumé fin Décembre et que le script de maintenance est lancé début janvier Janvier. ^^

Voici une première solution "infaillible" pour la méthode utilisée :
Au lieu d'utiliser comme référence le nombre de jour de l'année, on se base plutôt sur le nombre de jours Julien.
Je vous laisse aller consulter le lien explicatif. ^^

Voici un script qui calcul le nombre de jour Julien par rapport à la date du jour :

Code : Tout sélectionner

Local $iYear = @YEAR
Local $iMonth = @MON
Local $iDay = @MDAY

If $iMonth < 3 Then
	$iMonth = $iMonth + 12
	$iYear = $iYear - 1
EndIf

Local $i_FactorA = Int($iYear / 100)
Local $i_FactorB = Int($i_FactorA / 4)
Local $i_FactorC = 2 - $i_FactorA + $i_FactorB
Local $i_FactorE = Int(1461 * ($iYear + 4716) / 4)
Local $i_FactorF = Int(153 * ($iMonth + 1) / 5)
Local $iJulianDate = $i_FactorC + $iDay + $i_FactorE + $i_FactorF - 1524.5

MsgBox(0, "", "Nombre de jours Julien : " & $iJulianDate)
Et si pour une raison particulière vous souhaitez plutôt utiliser la même référence que la NASA (le nombre de Jour julien tronqué correspondant au 24 mai 1968 à 0 heures), alors remplacez le nombre 1524.5 par le nombre 2441525


La deuxième solution serait certainement plus simple, mais je n'ai pas testé si elle était soumise ou non au problème que vous avez déjà rencontré. On ne sait jamais, vous devriez essayer :

Code : Tout sélectionner

Local $aTC = DllCall("kernel32.dll", "dword", "GetTickCount")
If Not @error Then
		; 1 jour = 86400000 ms	5 jours = 432000000 ms
		If $aTC[0] > 432000000 Then MsgBox(16, "", "L'ordinateur fonctionne depuis plus de 5 jours !!!")
EndIf
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre