Windows 8/10 API Обнаружение приостановленного процесса - PullRequest
0 голосов
/ 03 мая 2018

Приложения UWP (или «Метро») в Windows 8/10 часто приостанавливаются, если они не находятся на переднем плане. Приложения в этом состоянии продолжают существовать, но больше не потребляют процессорное время. Это изменение, по-видимому, было введено для повышения производительности на устройствах с низким энергопотреблением / запоминающих устройствах, таких как планшеты и телефоны.

Скажите, пожалуйста, какой самый элегантный и простой способ обнаружить приложение в этом состоянии?

На данный момент я вижу 2 возможных решения:

  1. Вызовите NtQuerySystemInformation () и перечислите каждый процесс и каждый поток. Процесс "приостановлен", если все потоки находятся в состоянии ожидания. Этот подход потребует большого количества кода, и критически NtQuerySystemInformation () является лишь частично документированным и может быть удален в будущей ОС. NtQueryInformationProcess () также может предложить решение с той же проблемой.

  2. Вызовите GetProcessTimes () и запишите счетчики для каждого процесса. Подождите некоторое время (минуты) и проверьте их снова. Если счетчики процесса не изменились, то предположим, что процесс приостановлен. Это хак, и меня могут застрелить, даже если подумать об этом.

Джим

1 Ответ

0 голосов
/ 04 мая 2018

Второй (GetProcessTimes () ... подождите ... и проверьте их снова. Если счетчики процессов не изменились, то предположим, что процесс приостановлен) менее надежен Если процесс ожидает ввода (например, клавиатура, мышь или сеть) и не получая, он будет использовать очень мало процессорного времени и будет казаться приостановленным этим подходом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...