System Active Time

  • Gibs eigentlich ne möglichkeit um die System Active Time aus zu lesen?
    Also wie lange der Rechner schon an ist. Hab mir überlegt den Script sonst einfach in den Autotart rein zu machen und das ganze mit Timeini und Timediff zu machen, aber dann ergibt sich dass problem, dass wenn jemand den Rechner beim Benutzeranmelde Bildschirm stehen lässt, nachher diese Zeit fehlt.

    hoffentlich weis einer rat.

    Einmal editiert, zuletzt von Piccolo1986 (6. April 2009 um 14:37)

  • Allerdings übersteigt dies glaub meinen Horizont.
    Ich weiß zwar, dass das Ereignis 6009 Einschaltuhrzeit und 6006 Ausschaltuhrzeit ist,
    aber wie ich das dann weiterverwerten kann .......
    Hat da jemand nen Tipp, in der Forensuche gabs nur einen Beitrag über die Ereignisanzeige, und der Link war leider tot.

  • Die Laufzeit bekommst du so ;) (ob das noch funktioniert, wenn er länger als 24 Stunden an ist, kann ich nicht sagen.)

    [autoit]

    #include<Date.au3>
    Dim $H, $M, $S
    _TicksToTime(TimerDiff(0), $H, $M, $S)
    MsgBox(0, 'Computerlaufzeit', "Computer läuft bereits " & $H & ":" & $M &":" & $S)

    [/autoit]
    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

    $aArray = _TimeSystemRestart()
    MsgBox(64, "UpTime", "Weeks: " & $aArray[1] & @CRLF & _
    "Days: " & $aArray[2] & @CRLF & _
    "Hours: " & $aArray[3] & @CRLF & _
    "Minutes: " & $aArray[4] & @CRLF & _
    "Seconds: " & $aArray[5])

    [/autoit] [autoit][/autoit] [autoit]

    Func _TimeSystemRestart()
    Local $iSubTotal = DllCall('kernel32.dll', 'int', 'GetTickCount')
    If Not IsArray($iSubTotal) Then Return SetError(1, 0, 0)
    $iSubTotal = $iSubTotal[0] / 1000
    Local $iWeek = Int(($iSubTotal / 604800))
    If $iWeek > 0 Then $iSubTotal -= $iWeek * 604800
    Local $iDay = Int(($iSubTotal / 86400))
    If $iDay > 0 Then $iSubTotal -= $iDay * 86400
    Local $iHour = Int(($iSubTotal / 3600))
    Local $iMin = Int(($iSubTotal - ($iHour * 3600)) / 60)
    Local $iSec = Int(($iSubTotal - $iHour * 3600) - ($iMin * 60))
    Return StringSplit(StringFormat('%02d', $iWeek) & ':' & $iDay & ':' & StringFormat('%02d', $iHour) & ':' & _
    StringFormat('%02d', $iMin) & ':' & StringFormat('%02d', $iSec), ':')
    EndFunc ;==>_TimeSystemRestart

    [/autoit]

    Mega

    • Offizieller Beitrag

    Hier noch eine WMI-Version (mit Datum und Uhrzeit):

    Spoiler anzeigen
    [autoit]


    $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output = 'Zuletzt gestartet: ' & _WMIDateStringToDate($objItem.LastBootUpTime)
    Next
    Else
    $Output = 'No WMI Objects Found for class: Win32_OperatingSystem'
    EndIf
    MsgBox(0,0,$Output)

    [/autoit] [autoit][/autoit] [autoit]

    Func _WMIDateStringToDate($dtmDate)
    Return StringRegExpReplace($dtmDate, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).*', '$3.$2.$1 $4:$5:$6')
    EndFunc

    [/autoit]
  • Wunderbar, genau so hab ich das gemeint, hab mir aus euren Antworten das herleiten können was ich gebraucht habe, DIGGES THX

  • Kann mir jemand verraten, wie ich aus der WMI Time einen UNIX Timestamp bekomme?

    Bekomme das einfach nicht hin.