Мониторинг событий питания дисплея в Windows XP - PullRequest
8 голосов
/ 20 февраля 2012

В Windows только целевое приложение получает события питания дисплея через сообщение WM_SYSCOMMANDwParam, установленным на SC_MONITORPOWER и lParam, представляющим новое состояние питания).

В Windows Vista и более поздних версиях любое приложение может получать уведомления о событиях питания дисплея, вызывая функцию RegisterPowerSettingNotification, используя GUID_SESSION_DISPLAY_STATUS GUID .

Есть ли способ добиться того же результата в Windows XP на уровне приложений (т.е. без использования кода, работающего в режиме ядра)?

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Все, что вам нужно сделать, это обработать WM_SYSCOMMAND. Варианты, которые я могу придумать:

  • Используйте для этого SetWindowsHookExWH_CBT).

  • Внедрение DLL в каждый процесс, который перехватывает CreateProcess и внедряет себя во все будущие процессы, по сути, перехватывая всю систему. Вышеупомянутая DLL затем создаст подклассы для всех окон в текущем процессе, и вы можете обработать WM_SYSMESSAGE оттуда.

0 голосов
/ 25 февраля 2012

Разве вы не можете просто обработать сообщение WM_POWERBROADCAST в вашем WindowProc и, получив его, вызвать GetSystemPowerStatus?

...