Question: Does anyone know if there is an API to get the current monitor state (on or off) in Windows (XP/Vista/2000/2003)?

All of my searches seem to indicate there is no real way of doing this. 

[This thread](http://www.promixis.com/forums/archive/index.php/t-1282.html) tries to use [GetDevicePowerState](http://msdn.microsoft.com/en-us/library/aa372690(VS.85).aspx) which according to Microsoft's docs does not work for display devices. 

In Vista I can listen to [GUID\_MONITOR\_POWER\_ON](http://msdn.microsoft.com/en-us/library/aa373195(VS.85).aspx) but I do not seem to get events when the monitor is turned off manually. 

In XP I can hook into `WM_SYSCOMMAND` `SC_MONITORPOWER`, looking for status 2. This only works for situations where the system triggers the power off. 

The WMI `Win32_DesktopMonitor` class does not seem to help out as well. 

**Edit**: Here is [a discussion](http://groups.google.com/group/comp.os.ms-windows.programmer.win32/browse_thread/thread/6d3e0a0828e68b89/d095095f5244bab4?lnk=gst&q=GetDevicePowerState++monitor#d095095f5244bab4) on comp.os.ms-windows.programmer.win32 indicating there is no reliable way of doing this. 

Anyone else have any other ideas?

Answer: 
[GetDevicePowerState](https://msdn.microsoft.com/en-us/library/windows/desktop/aa372690%28v=vs.85%29.aspx) *sometimes* works for monitors. If it's present, you can open the `\\.\LCD` device. Close it immediately after you've finished with it.

Essentially, you're out of luck—there is no reliable way to detect the monitor power state, short of writing a device driver and filtering all of the power IRPs up and down the display driver chain. And that's not very reliable either.
**You can't.** 

Look like all monitor power capabilities connected to the **"power safe mode"**  

After searching i found **[here](http://cboard.cprogramming.com/showthread.php?p=755126)** code that connecting between **SC\_MONITORPOWER** message and system values (post number 2)  

I use the code to testing if the system values is changing when i am manually switch off the monitor.

```
int main()
{
    for(;monitorOff()!=1;)
        Sleep(500);
    return 0;
}//main

```

And the code is never stopped, no matter how long i am switch off my monitor.  

There the code of monitorOff function:

```
int monitorOff()
{
    const GUID MonitorClassGuid =
        {0x4d36e96e, 0xe325, 0x11ce, 
            {0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}};

    list<DevData> monitors;
    ListDeviceClassData(&MonitorClassGuid, monitors);

    list<DevData>::iterator it = monitors.begin(),
                            it_end = monitors.end();
    for (; it != it_end; ++it)
    {
        const char *off_msg = "";

        //it->PowerData.PD_PowerStateMapping
        if (it->PowerData.PD_MostRecentPowerState != PowerDeviceD0)
        {
            return 1;
        }
    }//for

    return 0;
}//monitorOff

```

**Conclusion :** when you manually switch of the the monitor, **you cant catch it by windows** (if there is no unusual driver interface for this), because all windows capabilities is connected to **"power safe mode"**.