Как определить, что заставка работает?

Одно из решений, которое можно было бы предложить, - это периодически искать специальный рабочий стол "Заставка", а если он присутствует, считать его работающей заставкой.

Но, видимо, это не относится ко всем заставкам, так как у некоторых упомянутый рабочий стол присутствует всегда.

Есть ли более надежные решения для этого?

5 ответов

Решение

Я думаю, что ключ заключается в том, чтобы идентифицировать заставку по классу окна ("WindowsScreenSaverClass"). Я нашел эту страницу Как мне запускать, обнаруживать и останавливать заставки? у этого есть некоторые примеры кода и объяснения.

Посмотрите функцию WINAPI SystemParametersInfo() с параметром SPI_GETSCREENSAVERRUNNING. Это единственный документированный способ определить, работает ли хранитель экрана в данный момент. (Вы также можете узнать, включена ли даже заставка экрана, получить и установить значение тайм-аута и запустить заставку с помощью этой функции.)

КАК: Определить, работает ли хранитель экрана с помощью Visual Basic 6.0

Я знаю, что это для VB6, но это хорошее место для начала.

Поиск процессов для процесса с.scr в его.MainModule.FileName

Это моя реализация обнаружения событий заставки.

Заметки:

  • SPI_GETSCREENSAVERRUNNING обнаруживает Windows Event ID 4802 и 4803, которые не были точными в моем случае, см. мою проблему, следовательно, добавлен расчет времени простоя пользователя
  • GetLastInputInfo по-видимому, не работает, если процесс является службой.
Другие вопросы по тегам