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 ;            [1][8] - 1st process creation date/time = "MM/DD/YYY hh:mm:ss" (hh = 00 to 23) ;            [1][9] - 1st process command line string ;            ... ;            [n][0] thru [n][9] - 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 ; Date/Version:   07/02/2008  --  v2.0.2 ; Notes:            If an integer 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. ;            To get time-base properties (CPU and Memory usage), a 100ms SWbemRefresher is used. ;=============================================================================== Func _ProcessListProperties($Process = "", $sComputer = ".")     Local $sUserName, $sMsg, $sUserDomain, $avProcs, $dtmDate     Local $avProcs[1][2] = [[0, ""]], $n = 1     ; Convert PID if passed as string     If StringIsInt($Process) Then $Process = Int($Process)     ; Connect to WMI and get process objects     $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" & $sComputer & "\root\cimv2")     If IsObj($oWMI) Then ; Get collection processes from Win32_Process         If $Process = "" Then ; Get all             $colProcs = $oWMI.ExecQuery("select * from win32_process")         ElseIf IsInt($Process) Then ; Get by PID             $colProcs = $oWMI.ExecQuery("select * from win32_process where ProcessId = " & $Process)         Else ; Get by Name             $colProcs = $oWMI.ExecQuery("select * from win32_process where Name = '" & $Process & "'")         EndIf                 If IsObj($colProcs) Then ; Return for no matches             If $colProcs.count = 0 Then Return $avProcs ; Size the array             ReDim $avProcs[$colProcs.count + 1][10]             $avProcs[0][0] = UBound($avProcs) - 1 ; For each process...             For $oProc In $colProcs   ; [n][0] = Process name                 $avProcs[$n][0] = $oProc.name   ; [n][1] = Process PID                 $avProcs[$n][1] = $oProc.ProcessId   ; [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   ; [n][8] = Creation date/time                 $dtmDate = $oProc.CreationDate                 If $dtmDate <> "" Then       ; Back referencing RegExp pattern from weaponx                     Local $sRegExpPatt = "\A(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(?:.*)"                     $dtmDate = StringRegExpReplace($dtmDate, $sRegExpPatt, "$2/$3/$1 $4:$5:$6")                 EndIf                 $avProcs[$n][8] = $dtmDate   ; [n][9] = Command line string                 $avProcs[$n][9] = $oProc.CommandLine   ; increment index                 $n += 1             Next         Else             SetError(2); Error getting process collection from WMI         EndIf ; release the collection object         $colProcs = 0 ; 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(20)         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       ; [n][6] = CPU usage                     $avProcs[$n][6] = $oProc.PercentProcessorTime       ; [n][7] = memory usage                     $avProcs[$n][7] = $oProc.WorkingSet                     ExitLoop                 EndIf             Next         Next     Else         SetError(1); Error connecting to WMI     EndIf     ; Return array     Return $avProcs EndFunc;==>_ProcessListProperties $avRET = _ProcessListProperties("notepad.exe") MsgBox(0,"Memory Usage",$avRET[1][7])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值