Как определить, что заставка работает? - PullRequest
4 голосов
/ 04 февраля 2009

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

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

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

Ответы [ 5 ]

9 голосов
/ 06 февраля 2009

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

2 голосов
/ 04 февраля 2009

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

2 голосов
/ 04 февраля 2009

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

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

0 голосов
/ 29 апреля 2016

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

Примечания:

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

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

...