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

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

Отключить экранную заставку


Walker ©   (2002-11-27 07:00:00) 

Мне нужно на время запретить вызов экранной заставки (моя программа работает в полноэкранном режиме)

SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0); - не помогает

Как быть?


Walker   (2002-11-27 13:01:00) [1]

Спасибо всем... я тут немного помучался, вот что у меня получилось:

Предлагаю свой Unit для решения проблемы :)

unit ScreenSaveAtivater;

interface

procedure EnableScreenSave;
procedure DisableScreenSave;


implementation
uses
Windows;

var
ScreenSaverEnabled: Boolean;
ScreenSaveTimeOut: Integer;

procedure DisableScreenSaver;
begin
if ScreenSaverEnabled then
begin
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, @ScreenSaveTimeOut, 0);
SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, 0, nil, 0);
ScreenSaverEnabled := False;
end;
end;

procedure EnableScreenSaver;
begin
if not ScreenSaverEnabled then
begin
SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, ScreenSaveTimeOut, nil, 0);
ScreenSaverEnabled := True;
end;
end;


initialization
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, @ScreenSaveTimeOut, 0);
ScreenSaverEnabled := True;
finalization
EnableScreenSaver;
end.


Walker   (2002-11-27 12:36:00) [2]

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


А нсчёт Windows 95 Onlyпоясню, в этих хелпах, кот. поставляются с Delphi описываются всего две версии Windows - 95 и NT. И там где написано Win95 Only надо читатать так: "не для технологии NT" (т.е. Win 95 Only будет работать и под Win9x).


Внук   (2002-11-27 09:12:00) [3]

>>SPI_SCREENSAVERRUNNING Windows 95 only: Used internally; applications should not use this flag.
Верно, и не надо его использовать, есть другой метод:

var Flag:Bool;
begin
Flag:=false;
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,0,@Flag,0);
if Flag then WriteLn(ResFile,"ScreenSaver is active")
...
end;

Но это подойдет, если нужно определить, запущена ужезаставка, или нет.

А чтобы запретитьзапуск, нужно посмотреть ветку HKEY_CURRENT_USER\Control Panel\Desktop, как правильно сказали выше, только не параметр ScreenSaveActive (он, например, у меня равен 1, а заставка вообще отключена). Посмотрите, что меняется в этой ветке при назначении и снятии заставки :))

Кроме того, может быть, в данном случае достаточно просто поставить большое время ожидания там же. И позаботиться о том, чтобы изменения в реестре вступили в силу сразу же.


SottNick   (2002-11-27 07:58:00) [4]

2 Walker
1. SPI_SCREENSAVERRUNNING Windows 95 only: Used internally; applications should not use this flag.

2.
Dummy:=0;
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);
или
SystemParametersInfo( SPI_SCREENSAVERRUNNING, Word(True), @Dummy, 0);
фиг его знает. я не разбирался
3. HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive


Walker   (2002-11-27 07:33:00) [5]

BoxTer СЛЕПОЙ ЧТО ЛИ?????

SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0); - НЕ ПОМОГАЕТ


P.S. у меня тоже есть такая статья...


BoxTer   (2002-11-27 07:11:00) [6]

// Включение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
// Выключение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
Кстати, SystemParametersInfo имеет еще кучу полезных ключей SPI_****, подробности см. в win32.hlp


Наверх

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