Я в настоящее время опрашиваю каждые 150 мс:
IsProcessSuspended(pid) {
For thread in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Thread WHERE ProcessHandle = " pid) {
If (thread.ThreadWaitReason != 5) {
Return True
} Else {
Return False
}
}
}
Но это сильно напрягает мой процессор, и теперь мои вентиляторы работают на холостом ходу.
Я заметил, что WinWaitActive почти не использует ресурсы, и я хочу иметь что-то подобное для процессоров. Рассматриваемый процесс - WindowsInternal.ComposableShell.Experiences.TextInput.InputApp.exe
. У меня была одна идея, которая была связана с потоком и после первого пропуска части ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Thread WHERE ProcessHandle = " pid)
, но оказалось, что потоки и их число меняются со временем, поэтому мне нужно знать, какой поток останется?
Я также нашел метод UWP , который, кажется, делает это эффективно.