监视任务管理器中显示的Windows进程的VBA代码。
我正在尝试获取应用程序的RAM使用率和CPU使用率,并在excel中添加这些值。
我尝试使用WMI类,如下所示但是我正在获取进程ID。我无法检索RAM使用率和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
答案 0 :(得分:0)
如果您选择转到WMI路由,那么您可能会在Win32_Process类的WorkingSetSize
属性之后:
WorkingSetSize数据类型:uint64访问类型:只读限定符: DisplayName("工作集大小"),单位("字节")内存量 进程需要高效执行的字节 - 用于操作 使用基于页面的内存管理的系统。如果系统没有 有足够的内存(小于工作集大小),发生颠簸。 如果未知工作集的大小,请使用NULL或0(零)。如果 提供工作集数据,可以监控信息 了解流程的内存需求变化。
Win32_PerfFormattedData_PerfProc_Process类的PercentProcessorTime
:
PercentProcessorTime数据类型:uint64访问类型:只读 限定符:CookingType(" PERF_100NSEC_TIMER"),计数器 (" PercentProcessorTime"),PerfTimeStamp(" TimeStamp_Sys100NS"), PerfTimeFreq(" Frequency_Sys100NS")时间的百分比 处理器正在执行非空闲线程。这个属性是设计的 作为处理器活动的主要指标。它的计算方法是 测量处理器执行线程的时间 每个采样间隔中的空闲进程,并减去该值 从100%。 (每个处理器都有一个消耗周期的空闲线程 当没有其他线程准备好运行时。)它可以被视为 做有用工作所花费的样本间隔百分比。这个 property显示在此期间观察到的繁忙时间的平均百分比 采样间隔。它是通过监测时间来计算的 服务处于非活动状态,然后从100%中减去该值。
但您可能还想查看SWbemRefresher
对象(https://msdn.microsoft.com/en-us/library/aa393838(v=vs.85).aspx)。
您可以使用的Skeleton 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
答案 1 :(得分:0)
这些功能允许根据要求监视RAM和CPU使用情况。请注意,其中一个应用程序名称区分大小写并包含扩展名,另一个应用程序名称不区分大小写且不包含扩展名。
Debug.Print ProcessCpuUsage("Excel")
Debug.Print ProcessMemoryUsage("EXCEL.EXE") / 1024
Function ProcessCpuUsage(ProcessName As String) As Double
Dim Wmi As Object, Processes As Variant, Process As Object
Set Wmi = GetObject("winmgmts:")
Set Processes = Wmi.ExecQuery("SELECT PercentProcessorTime FROM win32_PerfFormattedData_PerfProc_Process WHERE Name='" & ProcessName & "'")
For Each Process In Processes
Exit For
Next Process
ProcessCpuUsage = Process.PercentProcessorTime
End Function
Function ProcessMemoryUsage(ProcessName As String) As Double
Dim Wmi As Object, Processes As Variant, Process As Object
Set Wmi = GetObject("winmgmts:")
Set Processes = Wmi.ExecQuery("SELECT WorkingSetSize FROM Win32_Process WHERE Name='" & ProcessName & "'")
For Each Process In Processes
Exit For
Next Process
ProcessMemoryUsage = Process.WorkingSetSize
End Function