winapi - Overvågning af skærmens strømbegivenheder på Windows XP

Indlæg af Hanne Mølgaard Plasc

Problem



Kun i Windows modtager den fokuserede applikation skærmeffekthændelser via WM\_SYSCOMMAND beskeden (med wParam indstillet til SC\_MONITORPOWER og lParam, der repræsenterer den nye strømtilstand). [11]]]


På Windows Vista og senere kan et hvilket som helst program blive underrettet om displaykraftsbegivenheder ved at kalde funktionen RegisterPowerSettingNotification ved hjælp af GUID'en GUID\_SESSION\_DISPLAY\_STATUS. [12] [13]]]


Er der en måde at opnå det samme resultat på Windows XP på applikationsniveau (dvs. ikke at bruge kode, der kører i kernel-tilstand)?

Bedste reference


Alt du skal gøre er at håndtere WM\_SYSCOMMAND. Valg jeg kan tænke på:



  • Brug SetWindowsHookEx til dette (med WH\_CBT).

  • Injicér en DLL i hver proces, som kroge CreateProcess og sprøjter sig ind i alle fremtidige processer, der i det væsentlige tilslutter hele systemet. Den førnævnte DLL vil derefter underklassificere alle vinduer i den aktuelle proces, og du kan håndtere WM\_SYSMESSAGE derfra.


Andre referencer 1


Kan du ikke bare håndtere beskeden WM\_POWERBROADCAST i dit WindowProc, og når du har modtaget, ring GetSystemPowerStatus?