• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 622
  • Last Modified:

Get monitor state

Hello.

Is it possible to get the state of the monitor (turned on/off, standby)? If so, how do I do it?

The WMI (Windows Management Instrumentation) Win32_DesktopMonitor class (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_desktopmonitor.asp) contains the information I need (Availability), but the Win32_DesktopMonitor class does not update real time.

Are there any other way to get this information?

Thanks in advance.

/Snebal
0
Michael G
Asked:
Michael G
1 Solution
 
Ivanov_GCommented:
You can handle WM_SYSCOMMAND. When monitor is being turned on/off the wParams is SC_MONITORPOWER      ...
0
 
Michael GSystems programmerAuthor Commented:
Thank you for your comment.

I have the following code which can tell me when powersafe gets activated, but it doesn't react if I turn off my monitor !?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;

  private
  protected
    procedure WMSysCommand(var Message : TWMSysCommand ); Message WM_SYSCOMMAND;
    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSysCommand(var Message : TWMSysCommand);
// Intercept screen saver or power monitor message and do something ...
begin
  if (Message.CmdType and $FFF0 = SC_SCREENSAVE) or
     (Message.CmdType and $FFF0 = SC_MONITORPOWER) then
   begin
     memo1.Lines.Add(datetimetostr(now)+ ': Powersafe activated or monitor power off')
  end;
  inherited; // let the message thru'
end; {WMSysCommand}

end.
0
 
Ivanov_GCommented:
Yep, I know about this. I couldn't make it work with monitor turned off...
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
Michael GSystems programmerAuthor Commented:
So it's not possible to detect if you turn off your monitor !?
0
 
Wim ten BrinkSelf-employed developerCommented:
Maybe some smarter monitors will signal the system that the monitor is turned off, but afaik, this is extremely uncommon. Many laptops will keep track of the monitor state of the LCD screen but I don't think this information is sent to the system. It's just used to turn off the monitor when you close the lid of the laptop.
0
 
Michael GSystems programmerAuthor Commented:
I never really solved the problem, but found a more or less working workaround.

I use a WMSysCommand, see below, to detect if powersave is activated, and then I use a global keyboard/mouse hook to detect user input that takes the monitor out of powersaving.

procedure TForm1.WMSysCommand(var Message : TWMSysCommand);
// Intercept screen saver or power monitor message and do something ...
begin
  if  (Message.CmdType and $FFF0 = SC_SCREENSAVE) or(Message.CmdType and
$FFF0 = SC_MONITORPOWER) then begin

    memo1.Lines.Add(datetimetostr(now)+ ': powersave')
  end; {if}
  inherited; // let the message thru'
end; {WMSysCommand}
0
 
Michael GSystems programmerAuthor Commented:
0
 
OzzModCommented:
Closed, 500 points refunded.
OzzMod
Community Support Moderator (Graveyard shift)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now