Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any way to detect the monitor state in Windows (on or off)?

Tags:

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 tries to use GetDevicePowerState which according to Microsoft's docs does not work for display devices.

In Vista I can listen to GUID_MONITOR_POWER_ON 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 on comp.os.ms-windows.programmer.win32 indicating there is no reliable way of doing this.

Anyone else have any other ideas?

like image 256
Sam Saffron Avatar asked Oct 15 '08 00:10

Sam Saffron


2 Answers

GetDevicePowerState 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.

like image 135
Roger Lipscombe Avatar answered Sep 26 '22 21:09

Roger Lipscombe


You could hook up a webcam, point it at your screen and do some analysis on the images you receive ;)

like image 33
thijs Avatar answered Sep 23 '22 21:09

thijs