Знаю - избитая тема, но тем не менее, есть вопросы. В общем, суть проблемы: есть процесс... нужно получить динамические данные, в реальном времени, загрузки CPU этим процессом в % выражении.
Что было сделано...
В первую очередь, решил пойти простым и доступным путем: использовать технологию WMI. Выполнить запрос класса Win32_PerfFormattedData_PerfProc_Process, передать ему PID нужного процесса и через функцию PercentProcessorTime получить нужные данные.
Типа вот так...
- Код: Выделить всё
Private Sub Form_Load()
Set PIDItems = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process where IDProcess=" & "здесь указываем PID нужного процесса", , 48)
For Each objItem In PIDItems
Debug.Print objItem.PercentProcessorTime
Next
End Sub
Такой код работает, и можно даже заключить его в цикл... но проблема в том, что вызвав стандартный «Диспетчер задач» и сравнив поле «ЦП»... с данным кодом, выявилось, что показания двух приложений относительно одного и того же процесса получаются совершенно разные. WMI показывает: 70... 0... 20... 100... а Диспетчер задач Windows показывает: 09... 2... 12... 36... 24... и т.д.
Шаг второй...
На этом почтенном форуме, нашел похожую тему и пример кода от пользователя jangle вот здесь...
http://bbs.vbstreets.ru/viewtopic.php?p=6675693&sid=05c636f4ed851d7bc1936b8c23190f13#p6675693
jangle написал Native DLL на PowerBasic, в которой использует API – GetProcessTimes, получая разницу последних двух ее аргументов, тем самым вычисляет эти самые %. Казалось бы: бери и пользуйся! Но... дальнейшие испытания кода от jangle немного смутили, пришлось снова плакать в подушку. Вот по какой причине... Я взял не Блокнот, а видеоплейер, что у меня есть – PotPlayerMini, запустил на нем фильм, и получил тоже самое, что и с кодом WMI... Даже еще хуже! Показания не редко уходили за 100%, чего быть вроде как не должно!
Посмотрите скриншоты...
В связи с чем вопрос: может Диспетчер задач отображает в «ЦП» что-то другое??? Но вроде как нет... Как мне тогда получить реальные данные загрузки CPU по типу, как отображает стандартный Диспетчер задач???
Разъясните, пожалуйста, поподробней.