![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить момент, когда Screen Saver закончил работу [D5]
DFR © (2005-08-06 04:39:00)По моему Win не посылает сообщение при этом?
DFR (2005-08-10 12:27:00) [1]Нужна еще помощь, по этой теме.
Процедуры и функция определяющие момент
начала и соответственно окончания
работы ScreenSaver`a, вроде работают
но есть вопросы.
Сначала код:
//Определяет окончание работы в OnTimer
functionIsScreenSaverRun:Boolean;
var
Run:Bool;
begin
Run:=False;
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,0,@Run,2);
Result:= Run ;
end;
procedureTForm1.Timer1Timer(Sender: TObject);
begin
If not IsScreenSaverRun Then
begin
Timer1.Enabled:= False;
// действия...
end;
end;
//Определяет начало работы
procedureWMSysCommand( var Message: TWMSysCommand); messageWM_SYSCOMMAND;
procedure TForm1.WMSysCommand( var Message: TWMSysCommand);
begin
inherited;
If Message.CmdType and $FFF0 = SC_SCREENSAVE Then
begin
Timer1.Enabled:= True;
end;
end;
1.Почему не посылается сообщение WM_SYSCOMMAND если главное окно(TForm1) не активно, например минимизировано.
2.Если у Вас есть возможность проверить функцию IsScreenSaverRun в Win95, Nt и 2000.
Будет ли она работать на этих платформах.
Eraser (2005-08-06 13:30:00) [2]В доплнении к Юрий Зотов © (06.08.05 10:10) [2] почитай http://forum.sources.ru/index.php?showtopic=82713&st=15&
Юрий Зотов (2005-08-06 10:10:00) [3]SystemParametersInfo с параметром SPI_GETSCREENSAVERRUNNING позволяет определить, работает ли скринсейвер. Проверять можно, например, по таймеру.
забыл (2005-08-06 07:46:00) [4]я вижу такой вариант:
определяем путь к scr зарегистрированного по умолчанию screensaverа, определяем запущен ли он в данный момент, получаем инфу по процессу. таймером пасем завершение или же попытаться waitforsingleobject...
P.S. не обессудьте, у мя щас раннее утро )