Process-CPU-Last in %

  • Die einfachste Lösung wird sein, wenn du den Taskmanager startest und dort die CPU-Auslastung ausliest. Am besten ist es, wenn du beim Taskmanager die Option 'Ausblenden, wenn minimiert' aktivierst.

    [autoit]

    If Not ProcessExists("taskmgr.exe") Then Run("taskmgr.exe","",@SW_MINIMIZE)
    WinSetState("Windows Task-Manager","",@SW_MINIMIZE)

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

    While 1
    $CPULoad = StringTrimLeft(StatusBarGetText("Windows Task-Manager","",2),16)
    msgbox(0,'CPU-Auslastung',$CPULoad)
    WEnd

    [/autoit]

    EDIt: Sorry, hab überlesen, dass du nur die Prozessorauslastung von einem Prozess willst.

  • Im englischen Forum habe ich noch was gefunden: _ProcessListProperties

    Spoiler anzeigen
    [autoit]

    #include <array.au3> ; for _ArrayDisplay()

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

    $avRET = _ProcessListProperties()
    _ArrayDisplay($avRET, "Debug: $avProcs, @error = " & @error)

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

    ;===============================================================================
    ; Function Name: _ProcessListProperties()
    ; Description: Get various properties of a process, or all processes
    ; Call With: _ProcessListProperties( [$Process [, $sComputer]] )
    ; Parameter(s): (optional) $Process - PID or name of a process, default is all
    ; (optional) $sComputer - remote computer to get list from, default is local
    ; Requirement(s): AutoIt v3.2.4.9+
    ; Return Value(s): On Success - Returns a 2D array of processes, as in ProcessList()
    ; with additional columns added:
    ; [0][0] - Number of processes listed (can be 0 if no matches found)
    ; [1][0] - 1st process name
    ; [1][1] - 1st process PID
    ; [1][2] - 1st process Parent PID
    ; [1][3] - 1st process owner
    ; [1][4] - 1st process priority (0 = low, 31 = high)
    ; [1][5] - 1st process executable path
    ; [1][6] - 1st process CPU usage
    ; [1][7] - 1st process memory usage
    ; ...
    ; [n][0] thru [n][7] - last process properties
    ; On Failure: Returns array with [0][0] = 0 and sets @Error to non-zero (see code below)
    ; Author(s): PsaltyDS at http://www.autoitscript.com/forum
    ; Notes: If a numeric PID or string process name is provided and no match is found,
    ; then [0][0] = 0 and @error = 0 (not treated as an error, same as ProcessList)
    ; This function requires admin permissions to the target computer.
    ; All properties come from the Win32_Process class in WMI.
    ;===============================================================================
    Func _ProcessListProperties($Process = "", $sComputer = ".")
    Local $sUserName, $sMsg, $sUserDomain, $avProcs
    If $Process = "" Then
    $avProcs = ProcessList()
    Else
    $avProcs = ProcessList($Process)
    EndIf

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

    ; Return for no matches
    If $avProcs[0][0] = 0 Then Return $avProcs

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

    ; ReDim array for additional property columns
    ReDim $avProcs[$avProcs[0][0] + 1][8]

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

    ; Connect to WMI and get process objects
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\cimv2")
    If IsObj($oWMI) Then
    ; Get collection of all processes from Win32_Process
    $colProcs = $oWMI.ExecQuery ("select * from win32_process")
    If IsObj($colProcs) Then
    ; For each process...
    For $oProc In $colProcs
    ; Find it in the array
    For $n = 1 To $avProcs[0][0]
    If $avProcs[$n][1] = $oProc.ProcessId Then

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

    ; [n][2] = Parent PID
    $avProcs[$n][2] = $oProc.ParentProcessId
    ; [n][3] = Owner
    If $oProc.GetOwner ($sUserName, $sUserDomain) = 0 Then $avProcs[$n][3] = $sUserDomain & "\" & $sUserName
    ; [n][4] = Priority
    $avProcs[$n][4] = $oProc.Priority
    ; [n][5] = Executable path
    $avProcs[$n][5] = $oProc.ExecutablePath

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

    ExitLoop
    EndIf
    Next
    Next
    Else
    SetError(2) ; Error getting process collection from WMI
    EndIf

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

    ; Get collection of all processes from Win32_PerfFormattedData_PerfProc_Process
    ; Have to use an SWbemRefresher to pull the collection, or all Perf data will be zeros
    Local $oRefresher = ObjCreate("WbemScripting.SWbemRefresher")
    $colProcs = $oRefresher.AddEnum ($oWMI, "Win32_PerfFormattedData_PerfProc_Process" ).objectSet
    $oRefresher.Refresh

    ; Time delay before calling refresher
    Local $iTime = TimerInit()
    Do
    Sleep(10)
    Until TimerDiff($iTime) > 100
    $oRefresher.Refresh

    ; Get PerfProc data
    For $oProc In $colProcs
    ; Find it in the array
    For $n = 1 To $avProcs[0][0]
    If $avProcs[$n][1] = $oProc.IDProcess Then
    $avProcs[$n][6] = $oProc.PercentProcessorTime
    $avProcs[$n][7] = $oProc.WorkingSet
    ExitLoop
    EndIf
    Next
    Next
    Else
    SetError(1) ; Error connecting to WMI
    EndIf

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

    ; Return array
    Return $avProcs
    EndFunc ;==>_ProcessListProperties

    [/autoit]