您正在尋找WorkingSetSize,它可能與您的任務管理器中列出的值不完全相同。根據它的documentation,工作集是在給定時間物理映射到進程上下文的內存量。
下面是如何確定的:
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$pid = Run("notepad")
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId = " & $pid, "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) And $pid <> -1 Then
For $objItem In $colItems
ConsoleWrite("WorkingSetSize: " & $objItem.WorkingSetSize & @CRLF)
Next
Else
ConsoleWrite("No WMI Objects Found for class 'Win32_Process' with ProcessId = " & $pid & @CRLF)
EndIf
您可以也從用這種方法Win32_Process
對象找出任何other value。
感謝它工作:),但我無法理解你的代碼。什麼是ObjGet試圖做什麼,它從哪裏試圖獲得。我也不明白$ pid <> -1。對不起,我是autoit – user1692342
** 1。**正如其文檔中所述,ObjGet「從現有進程或文件名中檢索對COM對象的引用。」所以你從WMI服務中獲得一個COM對象。有了它,你可以使用像ExecQuery這樣的方法來獲得一個類似SQL查詢的結果。 ** 2。** $ pid <> -1'只是檢查一個有效的PID。當您使用「運行(...)」功能時,您將獲得新創建的應用程序的有效PID,但只有當可以找到該程序時。所以基本上這就是:當你沒有一個有效的PID時,不要對COM對象做任何事情 - 否則'$ colItems'將無效訪問。 – Samoth
非常感謝 – user1692342