Page 1 sur 1

[R] Lastbootuptime

Posté : mer. 11 juin 2008 16:14
par fred39
Bonjour, je suis en train de faire mon premier script autoit,
j'aurais besoin d'une fonction me calculant depuis combien de temps ma station est allumée.
Equivalent à lastbootuptime.
merci d'avance

Re: lastbootuptime

Posté : mer. 11 juin 2008 16:42
par jbnh
On doit appeller la ddl: kernel32.dll

Code : Tout sélectionner

#Include <Date.au3>

$aTSB = DllCall ("kernel32.dll", "long", "GetTickCount")
$ticksSinceBoot = $aTSB[0]

dim $iHours, $iMins, $iSecs
_TicksToTime ( $ticksSinceBoot, $iHours, $iMins, $iSecs )

$iDays = int($iHours / 24)
$iHours = $iHours - ($iDays * 24)

msgbox(0,"System Uptime","Days: "&$iDays& ", Hours: "&$iHours &", Minutes: "&$iMins & ", Seconds: "&$iSecs )

Re: lastbootuptime

Posté : mer. 11 juin 2008 16:53
par fred39
Super
Merci JBNH

Re: lastbootuptime

Posté : mer. 11 juin 2008 17:46
par Tlem
Voici la source du code : http://www.autoitscript.com/forum/index ... t&p=222031

Sinon, il y a aussi cette possibilité : http://www.autoitscript.com/forum/index ... t&p=421611



PS : Merci de ne pas oublier la balise dans le titre (Lire les règles).

Re: [R] Lastbootuptime

Posté : mer. 18 juin 2008 21:31
par fred39
Bonsoir,
en fait j'ai un petit pb avec ce code.

Code : Tout sélectionner

#Include <Date.au3>

$aTSB = DllCall ("kernel32.dll", "long", "GetTickCount")
$ticksSinceBoot = ($aTSB[0]/1000)
msgbox(0,"System Uptime", $ticksSinceBoot )

dim $iHours, $iMins, $iSecs
_TicksToTime ( $ticksSinceBoot, $iHours, $iMins, $iSecs )
msgbox(0,"System Uptime", "Hours: "&$iHours &", Minutes: "&$iMins & ", Seconds: "&$iSecs )
$iDays = int($iHours / 24)
$iHours = $iHours - ($iDays * 24)

msgbox(0,"System Uptime","Days: "&$iDays& ", Hours: "&$iHours &", Minutes: "&$iMins & ", Seconds: "&$iSecs )
Quand la machine est allumée depuis + d'un mois
la variable $ticksSinceBoot a une valeur négative.
Donc tous les calculs qui suivent sont eronés...
Une piste ?
Merci.

Re: [..] Lastbootuptime

Posté : ven. 20 juin 2008 10:40
par fred39
Bonjour, tjs le même pb cité dans dans mon poste précédent.
J'ai installé ça sur plusieurs serveurs.
ET apparemment, quand le serveur est allumé depuis plus d'un mois, la valeur affectée à la variable $ticksSinceBoot est négative.
J'ai essayé en changeant dans la ligne
$aTSB = DllCall ("kernel32.dll", "long", "GetTickCount") long par d'autre types.
en récupérant la valeur absolue abs() rien n'y fait.
Avez vous une piste?

Re: [R] Lastbootuptime

Posté : ven. 20 juin 2008 23:21
par Tlem
Et celui-ci :

Code : Tout sélectionner

; Script basé sur le code original de bluebearr.
; http://www.autoitscript.com/forum/index.php?showtopic=31010&view=findpost&p=222019

#include <date.au3>
Dim $colItems, $Output

$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", 0x10 + 0x20)

If IsObj($colItems) Then
    For $objItem In $colItems
        $Output = WMIDateStringToDate($objItem.LastBootUpTime)
    Next
EndIf

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

$uptime = _DateDiff('s', $Output, _NowCalc())
$daysUp = Int($uptime / (60 * 60 * 24))
$remainder = Mod($uptime, 60 * 60 * 24)
$hoursUp = Int($remainder / (60 * 60))
$remainder = Mod($remainder, 60 * 60)
$minUp = Int($remainder / 60)
$secUp = Mod($remainder, 60)
MsgBox(0, "Uptime", "Votre Uptime est de :" & @LF & "  " & $daysUp & " Jours, " _
         & $hoursUp & " Heures, " & $minUp & " Minutes, " & $secUp & " Secondes.")

Re: [R] Lastbootuptime

Posté : ven. 27 juin 2008 10:36
par fred39
Le dernier script proposé par tlem,
renvoie la bonne valeur d'uptime.
Merci pour votre aide :D