2016-09-27 4 views
0

Код VBA для мониторинга процесса Windows, отображаемого в диспетчере задач.Код VBA для контроля процесса Windows, отображаемого в диспетчере задач

Я пытаюсь получить использование ОЗУ и использование ЦП приложения и добавить эти значения в excel.

Я попытался использовать класс WMI, как показано ниже, но howerver. Я получаю идентификатор процесса. Я не могу получить использование ОЗУ и использование ЦП. Может ли кто-нибудь помочь мне в этом?

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

только мое мнение, но не было бы намного легче собрать эти данные из [Performance Monitor] (https://technet.microsoft.com /en-us/library/cc749249(v=ws.11).aspx)? – Filburt

ответ

0

Если вы решили пойти по пути WMI, то вы можете быть после WorkingSetSize свойства класса Win32_Process:

Тип WorkingSetSize данных: uint64 Тип доступа: только для чтения Отборочные: DisplayName («Размер рабочего набора»), Единицы («байты») Объем памяти в байтах, который должен выполняться эффективно - для операционной системы , которая использует управление памятью на основе страниц. Если система не имеет , то она имеет достаточное количество памяти (меньше рабочего размера), происходит перехват. Если размер рабочего набора неизвестен, используйте NULL или 0 (ноль). Если предоставлено данных рабочего набора, вы можете отслеживать информацию до , понимая изменения требований к памяти процесса.

И PercentProcessorTime класса Win32_PerfFormattedData_PerfProc_Process:

Тип 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, но все еще находил свойство для использования ЦП. Ваш код помог мне. – Khushish

Смежные вопросы