2012-02-20 15 views
8

sólo con Windows la aplicación enfocada recibe eventos de energía de la pantalla mediante el mensaje WM_SYSCOMMAND (con wParam conjunto de SC_MONITORPOWER y lParam que representa el nuevo estado de energía).de vigilancia en Windows XP

En Windows Vista y versiones posteriores, cualquier aplicación puede ser notificado de los eventos de energía de visualización llamando a la función RegisterPowerSettingNotification, utilizando el GUID GUID_SESSION_DISPLAY_STATUS.

¿Hay alguna manera de lograr el mismo resultado en Windows XP, a nivel de aplicación (es decir, no usar código que se ejecuta en modo kernel)?

+1

Los conductores reciben notificaciones de eventos de encendido. –

+0

@BenVoigt: estoy buscando algo más sencillo, a nivel de aplicación ... – Wizard79

Respuesta

2

Todo lo que necesita hacer es manejar WM_SYSCOMMAND. Opciones que pueden pensar:

  • uso de este SetWindowsHookEx (con WH_CBT).

  • Inyecte un archivo DLL en cada proceso que enlaza CreateProcess y se inserta a sí mismo en todos los procesos futuros, esencialmente enganchando todo el sistema. La DLL antes mencionada subclasará todas las ventanas en el proceso actual, y usted puede manejar WM_SYSMESSAGE desde allí.

+2

+1 Creo que un gancho puede ser la mejor/única forma – Mehrdad

+1

@Jonathan Lingle: el 'WM_SYSMESSAGE' no existe. ¿Quieres decir 'WM_SYSCOMMAND'? – Wizard79

+0

@Lorenzo: yeh, eso fue un error tipográfico. Mi error. –

-1

¿No puedes manejar el mensaje WM_POWERBROADCAST en tu WindowProc y una vez recibido, llamar a GetSystemPowerStatus?

+0

No, WM_POWERBROADCAST no notifica los eventos de encendido de la pantalla (consulte http://msdn.microsoft.com/en-us/library/windows/ desktop/aa373247 (v = vs.85) .aspx) – Wizard79

+0

Obtengo un voto negativo, ¿verdad? ¿Lo has intentado? Busqué un reemplazo que funciona en XP y lo obtuve desde aquí: http://www.nxtbook.com/nxtbooks/cmp/msdnmag0707/index.php?startid=49 – Gunner

+1

Seguro que obtuviste un voto negativo. Tu respuesta está fuera de tema, también he explicado por qué: WM_POWERBROADCAST no notifica a _display_ power events. ¿Has leído la pregunta? ¿Y el enlace que te brindé en mi comentario anterior a tu respuesta? – Wizard79

Cuestiones relacionadas