2016-09-27 34 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

相关问题