• Offizieller Beitrag

    Hi,

    hier mal ein Entwurf um die Dauer in Sekunden zu bekommen, die ein Prozess läuft.

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <Array.au3>

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

    $re = _processUpTime("firef4ox.exe")
    If IsArray($re) Then
    _ArrayDisplay($re)
    Else
    MsgBox(64, "info", $re)
    EndIf

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

    #cs
    Return Code
    0 = No Process found
    -1 = Error - no object
    Array with [time in seconds][processID]
    #ce

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

    Func _processUpTime($exe)
    If not ProcessExists($exe) Then Return 0
    Local $process = '"' & $exe & '"'
    Local $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
    Local $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process Where NAME = " & $process & "", "WQL", 0x10 + 0x20)

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

    If Not IsObj($colItems) Then Return -1

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

    Local $return[1][2], $counter = 0
    For $objItem In $colItems
    If $counter > 0 Then ReDim $return[$counter + 1][2]
    $iDateCalc = _DateDiff('s', StringLeft($objItem.CreationDate, 4) & "/" & StringMid($objItem.CreationDate, 5, 2) & "/" & StringMid($objItem.CreationDate, 7, 2) _
    & " " & StringMid($objItem.CreationDate, 9, 2) & ":" & StringMid($objItem.CreationDate, 11, 2) & ":" & StringMid($objItem.CreationDate, 13, 2), _
    @YEAR & '/' & @MON & '/' & @MDAY & ' ' & @HOUR & ':' & @MIN & ':' & @SEC)
    $return[$counter][0] = $iDateCalc
    $return[$counter][1] = $objItem.ProcessId
    $counter += 1
    Next
    Return $return
    EndFunc ;==>_processUpTime

    [/autoit]

    So long,

    Mega

  • *Cry* das sind die dinge die fürchterlich interessant sind, ich aber nicht kapiere :( :(

    Kann _BITTE_ mal wer ne idiotenanleitung is Tutorial schreiben? =/

    Ich denke es geht nicht nur mir so :weinen:

  • Hab mal versucht, zu kommentieren:

    [autoit]

    Func _processUpTime($exe)
    ; Wenn der Prozess nicht existiert, Sofort mit 0 beenden
    If not ProcessExists($exe) Then Return 0
    ;Prozessname wird in ' Anführungszeichen ' gesetzt
    Local $process = '"' & $exe & '"'
    ; Ein WMI-Objekt wird erstellt
    Local $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
    ; Aus der WMI-Tabelle Win32_Process wird der Prozess mit dem Angegebenen Prozessname abgefragt
    Local $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process Where NAME = " & $process & "", "WQL", 0x10 + 0x20)

    ; Wenn die Rückgabe der Abfrage kein Objekt ist, beende mit -1
    If Not IsObj($colItems) Then Return -1

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


    ; Array für die Rückgabe erstellen
    Local $return[1][2], $counter = 0
    ; Für jedes Eigenschaft (Hier alles Objekte) im Objekt das flogende tun:
    ; wenn der Counter größer als 0 ist, dann gibt es mehrere Prozesse mit gleichem Namen, also Array erweitern.
    For $objItem In $colItems
    If $counter > 0 Then ReDim $return[$counter + 1][2]

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

    #cs
    Zeitunterschied in Sekunden vom aktuellenm Datum zum Erstellunsdatum des Prozesss ( Dieses wird aus dem String CreationDate des Objekts extrahiert. )
    Dieses ist folgendermaßen aufgebaut: YYYYMMDDhhmmss.??????+???
    #ce
    $iDateCalc = _DateDiff('s', StringLeft($objItem.CreationDate, 4) & "/" & StringMid($objItem.CreationDate, 5, 2) & "/" & StringMid($objItem.CreationDate, 7, 2) _
    & " " & StringMid($objItem.CreationDate, 9, 2) & ":" & StringMid($objItem.CreationDate, 11, 2) & ":" & StringMid($objItem.CreationDate, 13, 2), _
    @YEAR & '/' & @MON & '/' & @MDAY & ' ' & @HOUR & ':' & @MIN & ':' & @SEC)

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

    $return[$counter][0] = $iDateCalc
    $return[$counter][1] = $objItem.ProcessId
    ; Counter für eventuellen nächsten Durchlauf erhöhen
    $counter += 1
    Next
    ; Ergebnisse zurückgeben
    Return $return
    EndFunc ;==>_processUpTime

    [/autoit]

    Einmal editiert, zuletzt von progandy (31. Oktober 2007 um 12:16)

  • prograndy. mein AutoitWissen reicht, um zu wissen WAS er macht.
    nur zu wissen, WIE er weiß wo er das anchguckt

    Local $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Process Where NAME = " & $process & "", "WQL", 0x10 + 0x20)

    usw

    würde bitte mal wer was schreiben@tutorial :(

  • Hey Huggy,

    die frage ist eigentlich nicht, was er macht sondern was man damit alles machen kann!!!

    Dieses Tool generiert au3 scripts, mit denen mann so ziemlich jede Information die Windows hat auslesen kann.
    Von der Anzahl der Sektoren deiner Festplatte bis zur Auflösung deines Monitors.

    http://www.autoitscript.com/forum/index.php?autocom=downloads&showfile=29

    Weitere Infos zu WMI: http://de.wikipedia.org/wiki/Windows_M…Instrumentation

    Nochn Tipp, damit es lief musste ich diesen Teil aus Zeile 27 löschen!
    ";$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS"

    Einmal editiert, zuletzt von Merlink (27. November 2008 um 22:57)