![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отключение скринсейвера
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.