Hiho,
wie bekomme ich die momentane CPU-Last eines Prozesses in % raus?
Habe ProcessGetStats gefunden, habe aber ka, was mir die rückgabewerte so sagen sollen ... gibts da schon was?
Hiho,
wie bekomme ich die momentane CPU-Last eines Prozesses in % raus?
Habe ProcessGetStats gefunden, habe aber ka, was mir die rückgabewerte so sagen sollen ... gibts da schon was?
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)
While 1
$CPULoad = StringTrimLeft(StatusBarGetText("Windows Task-Manager","",2),16)
msgbox(0,'CPU-Auslastung',$CPULoad)
WEnd
EDIt: Sorry, hab überlesen, dass du nur die Prozessorauslastung von einem Prozess willst.
Im englischen Forum habe ich noch was gefunden: _ProcessListProperties
#include <array.au3> ; for _ArrayDisplay()
[/autoit] [autoit][/autoit] [autoit]$avRET = _ProcessListProperties()
_ArrayDisplay($avRET, "Debug: $avProcs, @error = " & @error)
;===============================================================================
; 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
; Return for no matches
If $avProcs[0][0] = 0 Then Return $avProcs
; ReDim array for additional property columns
ReDim $avProcs[$avProcs[0][0] + 1][8]
; 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
; [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
ExitLoop
EndIf
Next
Next
Else
SetError(2) ; Error getting process collection from WMI
EndIf
; 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
; Return array
Return $avProcs
EndFunc ;==>_ProcessListProperties
vielleicht kannst du was mit PSLIST -> PSTOOLS basteln
dank euch, das aus dem engl. forum ist perfekt =)