2016-09-27 35 views
0

VBA代碼監視窗口過程顯示在任務管理器中。VBA代碼監視任務管理器中顯示的窗口過程

我想獲取應用程序的RAM使用情況和CPU使用情況,並在Excel中添加這些值。

我試過使用WMI類如下,但howerver我得到進程ID.I無法檢索內存使用情況和CPU使用率。 任何人都可以幫助我嗎?

Sub test2() 
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process where caption='excel.exe'", , 48) 
    For Each objItem In colItems 
     Sheet1.Range("d2").Value = objItem.ProcessId 
    Next 

    Set colItems = objWMIService.ExecQuery(_"SELECT * FROM Win32_PerfFormattedData_PerfProc_Process where IDProcess=" & Sheet1.Range("d2").Value, , 48) 

    For Each objItem In colItems 
     Sheet1.Range("A1").Value = "PercentProcessorTime: " & objItem.PercentProcessorTime 
    Next 

End Sub 
+1

只是我的意見,但以收集從[性能監視器]這個數據不會是比較容易的方式(https://technet.microsoft.com /en-us/library/cc749249(v=ws.11).aspx)? – Filburt

回答

0

如果你選擇走WMI路線,那麼你可能是Win32_Process類的WorkingSetSize財產後:

WorkingSetSize數據類型:UINT64訪問類型:只讀限定符: 顯示名稱(「工作集大小」),單位(「字節」)進程需要有效執行的 字節的內存量 - 對於使用基於頁面的內存管理的操作系統 。如果系統沒有足夠的內存(小於工作集大小) ,則發生抖動。 如果工作集的大小未知,請使用NULL或0(零)。如果提供了 工作集數據,則可以監視信息到 瞭解進程內存變化的需求。

而且Win32_PerfFormattedData_PerfProc_Process類的PercentProcessorTime

PercentProcessorTime數據類型:UINT64訪問類型:只讀 預選賽:CookingType( 「PERF_100NSEC_TIMER」),計數器 ( 「PercentProcessorTime」),PerfTimeStamp (「TimeStamp_Sys100NS」), PerfTimeFreq(「Frequency_Sys100NS」) 處理器正在執行非空閒線程的時間百分比。該屬性被設計爲 作爲處理器活動的主要指標。通過 計算處理器花費在每個採樣間隔中執行空閒進程的線程的時間,並從100%減去該值 。 (每個處理器有一個空閒線程,當沒有其他線程準備運行時,它會消耗週期 )。可以將其看作執行有用工作所花費的採樣間隔的百分比 。此 屬性顯示採樣間隔 期間觀測到的繁忙時間的平均百分比。它通過監視 服務處於非活動狀態的時間進行計算,然後從100%中減去該值。

但是,您可能還想查看SWbemRefresher對象(https://msdn.microsoft.com/en-us/library/aa393838(v=vs.85).aspx)。

你一起工作骨架VBA代碼:

Dim srvEx As SWbemServicesEx 
Dim xlProcSet As SWbemObjectSet 
Dim xlPerfSet As SWbemObjectSet 
Dim objEx As SWbemObjectEx 

Set srvEx = GetObject("winmgmts:\\.\root\CIMV2") 
Set xlProcSet = srvEx.ExecQuery("SELECT * FROM Win32_Process WHERE name = 'EXCEL.EXE'") 
Set xlPerfSet = srvEx.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process WHERE name = 'EXCEL'") 

For Each objEx In xlProcSet 
    Debug.Print objEx.Name & " RAM: " & objEx.WorkingSetSize/1024 & "kb" 
Next 

For Each objEx In xlPerfSet 
    Debug.Print objEx.Name & " CPU: " & objEx.PercentProcessorTime & "%" 
Next 
+0

謝謝。我使用WorkingSetSize屬性獲得了內存使用情況,但仍在查找CPU使用情況的屬性。你的代碼幫了我。 – Khushish

相關問題