Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отключение скринсейвера


Страницы:   1 2

DeadMeat ©   (2008-08-02 14:27:00) 

Здравсте.
Не знал где писать, здесь или в Медиа. Но написал здесь, т.к. это касается WinAPI больше, чем Медиа.
И так... собсна сабж.
Как отключить (или предотвратить) запуск скринсейвера во время работы моего приложения?
Следующие варианты исключаются:
стереть из system.ini или реестра (SystemParametersInfo делает примерно тоже)
самому стать скринсейвером
забивать процесс скринсейвера при запуске
"двигать мышку" или "нажимать клаву" для имитации работы юзера

т.к. при неожиданном прекращении работы приложения, восстановить предыдущие значение не реально, а двигать туда-сюда мышь (даже если это визуально не видно) не красиво.

Пробовал перехват WM_SYSCOMMAND с параметром SC_SCREENSAVE, но прочитав чуть ниже (в МСДН) понял, что не подходит:
[i]Microsoft Windows Vista and later: If password protection is enabled by policy, the screen saver is started regardless of what an application does with the SC_SCREENSAVE notification—even if fails to pass it to DefWindowProc.[/i]
Возникает вопрос - а как же? Ведь разные видео плееры это делают даже на Висте с установленным паролем....


Фишер   (2008-08-05 18:23:00) [21]

На DelphiWord есть такой код:

Как отключить хранитель экрана
Автор: Олег Кулабухов

procedure TForm1.Button1Click(Sender: TObject);
begin
 {Turn it off}
 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);

 {Turn it on}
 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);
end;


Сам не проверял:(


DeadMeat   (2008-08-05 17:47:00) [22]

Никто не против, если я слегонца апну ветку?


DeadMeat   (2008-08-02 15:17:00) [23]


> Фишер   (02.08.08 14:59) [1]


> DeadMeat ©   (02.08.08 14:27) 

Пробовал перехват WM_SYSCOMMAND с параметром SC_SCREENSAVE, но прочитав чуть ниже (в МСДН) понял, что не подходит:
Microsoft Windows Vista and later: If password protection is enabled by policy, the screen saver is started regardless of what an application does with the SC_SCREENSAVE notification—even if fails to pass it to DefWindowProc.


Фишер   (2008-08-02 14:59:00) [24]

В каком-то из старых FAQ нашел:

Как  запретить  запускаться  скринсэйверу,  когда  моя  программа
 активна?

 
 unit Unit1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls,
   Forms, Dialogs, StdCtrls, ExtCtrls;
   
 type
   TForm1 = class(TForm)
     RadioGroup1: TRadioGroup;
     procedure FormCreate(Sender: TObject);
       private
       procedure ProcessMess(var msg:TMsg; var handled:boolean) ;
     { Private declarations }
   public
     { Public declarations }
   end;
   
 var
   Form1: TForm1;
   
 implementation
 
 {$R *.DFM}
 
 { TForm1 }
 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;
 
 end.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо