Похоже, что когда Windows хочет запустить заставку или выключить монитор, она отправит WM_SYSCOMMAND
в самое верхнее окно с wParam
из SC_SCREENSAVE
(для запуска заставки) или wParam
из SC_MONITORPOWER
и lParam
из 1 или 2 (для выключения монитора). Это сообщение затем будет передано DefWindowProc
, который фактически выполнит действие. Таким образом, если ваше окно окажется самым верхним, вы можете перехватывать эти события и игнорировать их (или делать что-либо еще, прежде чем передать их в DefWindowProc
).
В Windows Vista существует более интуитивный и надежный способ узнать состояние питания монитора. Вы звоните RegisterPowerSettingNotification
, чтобы сказать системе, чтобы она отправила в ваше окно сообщение WM_POWERBROADCAST
с wParam
из PBT_POWERSETTINGCHANGE
и lParam
, указывающим на POWERBROADCAST_SETTING
структуру.
Я не могу проверить ни один из них, так как в настоящее время у меня нет компьютера с Windows поблизости. Я надеюсь, однако, они указывают вам правильное направление.
Ссылки: