2011-06-30 20 views
7

¿Cómo puedo verificar programáticamente en Windows 7 y XP si la 'administración de energía de Windows' ha apagado la pantalla? (Si puedo recibir un evento, eso sería aún mejor.)Compruebe si la pantalla está desactivada por la administración de energía de Windows

+1

¿por qué quieres saber? ¿Entonces puedes volver a encenderlo? Hay una forma de decirle a Windows que "cuando se ejecuta esta aplicación no recibe mucha acción del teclado/mouse, pero eso no significa que estemos inactivos, así que no pongas en blanco la pantalla" (por ejemplo, para un reproductor de video). Si ese es usted, prevenir el blanking es mejor que ser notificado, ¿no? –

+0

similar: http://stackoverflow.com/questions/328490/monitoring-a-displays-state-in-python –

+0

Puede consultar IMSVidDevice: msdn.microsoft.com/en-us/library/dd694519(VS.85) .aspx –

Respuesta

7

No creo que se pueda hacer para XP. En Windows 7 hay todo tipo de regalos relacionados con la administración de energía. El Windows API Code Pack es un conjunto de contenedores administrados que son simples para llamar desde C# o VB y que mapean paradigmas de Windows (como receptores de eventos, mensajes de Windows y punteros a funciones) en .NET (como delegados y eventos). que viene con el paquete de código, aquí hay un código que te pueden gustar:

using Microsoft.WindowsAPICodePack.ApplicationServices; 

// . . . 
     PowerManager.IsMonitorOnChanged += new EventHandler(MonitorOnChanged); 
// . . . 
    void MonitorOnChanged(object sender, EventArgs e) 
    { 
     settings.MonitorOn = PowerManager.IsMonitorOn; 
     AddEventMessage(string.Format("Monitor status changed (new status: {0})", PowerManager.IsMonitorOn ? "On" : "Off")); 
    } 

Editar:

enlaces al código de paquete de API de Windows: Windows API Code Pack: Where is it?

Si quieres lo usa tal como se menciona en este post comprueba esto: https://stackoverflow.com/a/27709672/846232

+0

Gracias amigo. Añadiré un enlace para descargar esa biblioteca :) – sczdavos

+0

Funciona como un amuleto, combinado con la comprobación del protector de pantalla de http://stackoverflow.com/a/9858981/1025177 (change "(isRunning)" to "(isRunning || ! PowerManager.IsMonitorOn) ") se pueden cubrir ambos tipos de salvapantallas: D – BloodyRain2k

1

Su aplicación recibirá un mensaje WM_SYSCOMMAND con SC_MONITORPOWER en wParam (asegúrese de hacerlo primero y wParam con 0xfff0). Enviará un mensaje similar cuando se active el protector de pantalla (SC_SCREENSAVE). Si su objetivo es evitar que la pantalla se apague, puede devolver 0 en estos, aunque eso no funciona cuando el usuario tiene una contraseña establecida.

+0

Tampoco funciona si la ventana de su aplicación no es la ventana activa. – Dunk

Cuestiones relacionadas