Перехват Заставки

Тема в разделе "Delphi - Система", создана пользователем Slava9371, 14 май 2012.

  1. Slava9371

    Slava9371 Гость

    Добрый вечер.
    Возникла задача перехватить появление экранной заставки.
    Нашел код:

    Код (Delphi):
    procedure TForm1.ProcessMess(var msg: TMsg; var handled: boolean);
    begin
    if (msg.message=WM_SYSCOMMAND) and
    (msg.wParam=SC_SCREENSAVE) then
    handled:=true
    else
    handled:=false;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Application.OnMessage:=ProcessMess;
    end;
    но он не совсм подходит так как:
    Windows посылает такое сообщение только текущему (top-level)
    приложению.
    И это можно решить с помощью SetWindowsHookEx()

    Но в тоже время спокойно перехватил переход в спящий режим: вот таким кодом:

    Код (Delphi):
    procedure WMPowerBroadcast( var Message: TMessage); message WM_POWERBROADCAST;

    procedure TForm1.WMPowerBroadcast(var Message: TMessage);
    begin
    ShowMessage('Sleep')
    end;
    Предотвращать или запрещать показ заставки мне не нужно, надо только что-бы программа узнала о запуске заставки.

    Вопрос: подскажите какой нибудь способ перехвата заставки, и можно ли обойтись без использования ловушки?
    Заранее спасибо...
     
  2. Slava9371

    Slava9371 Гость

    Неужели ни кто не сталкивался с такой проблемой?
     
  3. Slava9371

    Slava9371 Гость

    Разобрался!
    Проблему решил таким вот на мой взгляд шаманским) способом:

    Код (Delphi):
    var
    ScreenSaverActive: Bool;
    Check : byte;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    ScreenSaverActive := False;
    Check := 0;
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);

    begin
    SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @ScreenSaverActive, 0);
    if (Check = 0) and (ScreenSaverActive = true) then begin
    Check := 1;
    //если заставка запущенна
    end;
    if (Check = 1) and (ScreenSaverActive = False) then begin
    Check := 2;
    //если заставка отключается
    end
    end;
    Тема закрыта!
     
Загрузка...

Поделиться этой страницей