2010-10-12 29 views

Respuesta

18

WMI puede ayudar.

En Vista +, existe la clase WmiMonitorBasicDisplayParams, donde la propiedad "Activo" le dice si la pantalla está activa.

Aquí hay un ejemplo que funciona para mí:

using System.Management; 

// ... 

var query = "select * from WmiMonitorBasicDisplayParams"; 
using(var wmiSearcher = new ManagementObjectSearcher("\\root\\wmi", query)) 
{ 
    var results = wmiSearcher.Get(); 
    foreach (ManagementObject wmiObj in results) 
    { 
     // get the "Active" property and cast to a boolean, which should 
     // tell us if the display is active. I've interpreted this to mean "on" 
     var active = (Boolean)wmiObj["Active"]; 
    } 
} 
+7

Nunca dejo de sorprenderme por la cantidad de información oculta en WMI. –

+1

Algunas pantallas antiguas conectadas a través de un cable VGA son generalmente dispositivos tontos, ya que solo informan información "conectada" y EDID. NO hay estado de energía presente; ¿Qué cambió en las nuevas pantallas para que puedan ver? –

+1

@mhambra - ¿Todo? – codekaizen

-4

Esto no se puede hacer: No hay manera de comprobar si el monitor está encendido. Puede verificar si un monitor secundario está habilitado: use System.Windows.Forms.Screen.AllScreens

+1

No puedo creer que haya _no_ forma de comprobar programáticamente. He visto que el sistema operativo lo hace. ¿Por qué se está votando esto? – codekaizen

3

Toda la propiedad Active hace es decir si Windows está utilizando la pantalla o no. Además, DVI/HDMI informará una conexión incluso cuando la pantalla esté apagada. En resumen, no hay otro método de verificación aparte de algo hecho en casa, como conectar un sensor de luz o cámara web y apuntarlo a la luz de encendido del monitor :)

Cuestiones relacionadas