Boottime von PC in Registry schreiben

  • Hallo AutoIt Leihe,

    Ok, meine Script ist länger, aber sofern du die genaue Boottime benötigst. ;)

    Spoiler anzeigen
    [autoit]


    Dim $BootTime
    Dim $TDYear, $TDMonth, $TDDay, $TDHour, $TDMinute, $TDSeconds
    Dim $Min5Var

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

    ; Einstellunen------------------------------------------------------------
    AutoItSetOption('TrayIconHide')
    $Debug=1
    $ExecutionTime=5
    ; ------------------------------------------------------------------------

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

    ; Rufe BootTime Function auf - Hier wird über WMI die BootTime abgefragt.-
    BootTime()
    ; ------------------------------------------------------------------------

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

    ; Teile den BootTime String in Jahr Monat Tag Stunde Minute Sekunde auf --
    $Year=StringLeft($BootTime, 4)
    $Month=StringMid($BootTime, 5, 2)
    $Day=StringMid($BootTime, 7, 2)
    $Hour=StringMid($BootTime, 9, 2)
    $Minute=StringMid($BootTime, 11, 2)
    $Seconds=StringMid($BootTime, 13, 2)
    ; ------------------------------------------------------------------------

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

    ; Schreibe die aus WMI geholte Zeit in die Console -----------------------
    ConsoleWrite('> Last Boot Up Time : ' & $BootTime & @CRLF)
    ; ------------------------------------------------------------------------

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

    ; Gebe dieser Variable dasselbe Aussehen für die jetzige Zeit ------------
    ; und schreibe den Wert in die Console -----------------------------------
    ; Ist damits in der Console schöner aussieht -----------------------------
    $TimeNow=@YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
    ConsoleWrite('> Jetziger Zeitstempel : ' & $TimeNow & @CRLF)
    ; ------------------------------------------------------------------------

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

    ; Teile den TimeNow String in Jahr Monat Tag Stunde Minute Sekunde auf ---
    ; und berechne die Differenz des einzelnen Arguments ---------------------
    ; Entscheide ausserdem ob Maschine mehr als $ExecutionTime läuft ---------
    GetTimeDifferenz()
    ; ------------------------------------------------------------------------

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

    ; Zeige entsprechende Meldung in der Console an. -------------------------
    ; Hier kann man auch etwas anderes ausführenn lassen ---------------------
    If $Min5Var Then
    ConsoleWrite('> Der Rechner läuft : ' & $TDDay & ' Jahre ' & $TDMonth & ' Monate ' & $TDDay & ' Tage ' & $TDHour & ' Stunden ' & $TDMinute & ' Minuten ' & $TDSeconds & ' Sekunden.' & @CRLF)
    ConsoleWrite('> Der Rechner läuft länger als ' & $ExecutionTime & ' Minuten.' & @CRLF)
    $ExitCode=0
    Else
    ConsoleWrite('> Der Rechner läuft : ' & $TDDay & ' Jahre ' & $TDMonth & ' Monate ' & $TDDay & ' Tage ' & $TDHour & ' Stunden ' & $TDMinute & ' Minuten ' & $TDSeconds & ' Sekunden.' & @CRLF)
    ConsoleWrite('> Der Rechner läuft nicht länger als ' & $ExecutionTime & ' Minuten.' & @CRLF)
    $ExitCode=-1
    EndIf
    ; ------------------------------------------------------------------------

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

    ; Hiermit wird das Programm beendet sowie ein ErrorCode ausgegeben. ------
    Terminate ($Exitcode)
    ; ------------------------------------------------------------------------

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

    Func Terminate($Exitcode)
    Exit ($Exitcode)
    EndFunc

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

    Func BootTime()
    $COMPUTERNAME=EnvGet("COMPUTERNAME")
    Local $ProductCode, $ProductName, $Val
    Local $objItems
    Local $objWMI

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20

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

    $objWMI = ObjGet("winmgmts:\\" & $COMPUTERNAME & "\root\CIMV2")
    $objItems = $objWMI.ExecQuery('Select * from Win32_OperatingSystem', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($objItems) Then
    For $objItem In $objItems
    $oBootTime = $objItem.LastBootUptime
    Next
    EndIf
    $BootTimeArray=StringSplit($oBootTime,".",1) ; Entferne alle Zahlen nach dem . damit es in der Console schöner aussieht.
    $BootTime=$BootTimeArray[1]; Gib mir den Teil des Arrays links vom . (Punkt)
    EndFunc

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

    Func GetTimeDifferenz()
    If @YEAR < $Year Then $TDYear=(@YEAR-$Year)*-1
    If @YEAR = $Year Then $TDYear=0
    If @YEAR > $Year Then $TDYear=@YEAR-$Year
    If $Debug Then ConsoleWrite('> Time Differenz Year = ' & $TDYear & @CRLF)

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

    If @MON < $Month Then $TDMonth=(@MON-$Month)*-1
    If @MON = $Month Then $TDMonth=0
    If @MON > $Month Then $TDMonth=@MON-$Month
    If $Debug Then ConsoleWrite('> Time Differenz Month = ' & $TDMonth & @CRLF)

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

    If @MDAY < $Day Then $TDDay=(@MDAY-$Day)*-1
    If @MDAY = $Day Then $TDDay=0
    If @MDAY > $Day Then $TDDay=@MDAY-$Day
    If $Debug Then ConsoleWrite('> Time Differenz Day = ' & $TDDay & @CRLF)

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

    If @HOUR < $Hour Then $TDHour=(@HOUR-$Hour)*-1
    If @HOUR = $Hour Then $TDHour=0
    If @HOUR > $Hour Then $TDHour=@HOUR-$Hour
    If $Debug Then ConsoleWrite('> Time Differenz Hour = ' & $TDHour & @CRLF)

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

    If @MIN < $Minute Then $TDMinute=(@MIN-$Minute)*-1
    If @MIN = $Minute Then $TDMinute=0
    If @MIN > $Minute Then $TDMinute=@MIN-$Minute
    If $Debug Then ConsoleWrite('> Time Differenz Minute = ' & $TDMinute & @CRLF)

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

    If @SEC < $Seconds Then $TDSeconds=(@SEC-$Seconds)*-1
    If @SEC = $Seconds Then $TDSeconds=0
    If @SEC > $Seconds Then $TDSeconds=@SEC-$Seconds
    If $Debug Then ConsoleWrite('> Time Differenz Seconds = ' & $TDSeconds & @CRLF)

    If $TDYear >= 1 Then
    $Min5Var=True
    Return $Min5Var
    ElseIf $TDMonth >= 1 Then
    $Min5Var=True
    Return $Min5Var
    ElseIf $TDDay >= 1 Then
    $Min5Var=True
    Return $Min5Var
    ElseIf $TDHour >= 1 Then
    $Min5Var=True
    Return $Min5Var
    ElseIf $TDMinute >= $ExecutionTime Then
    $Min5Var=True
    Return $Min5Var
    EndIf
    $Min5Var=False
    Return
    EndFunc

    [/autoit]

    TrayIcon wird nicht angezeigt.

    Schönen Abend.

    --
    Mit freundlichen Grüßen,
    Axel Stoppa