Mirror

How to check when a screen saver has been invoked (Views: 703)


Problem/Question/Abstract:

I want my application to go into 'sleep mode' when the screen saver has been started.

Answer:

unit U1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure AppMessage(var AMessage: TMsg; var Handled: Boolean);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{Get screen saver messages}

procedure TForm1.AppMessage(var AMessage: TMsg; var Handled: Boolean);
begin
  if ((WM_SYSCOMMAND = AMessage.Message) and (SC_SCREENSAVE = AMessage.wParam)) then
  begin
    Handled := True;
    Label1.Caption := 'Warning! Screen saver detected. Top clearance required.';
    Handled := False;
  end;
end;

{On form create}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage;
end;

end.

<< Back to main page