Текущий архив: 2003.02.06;
Скачать: CL | DM;
ВнизОтключить экранную заставку Найти похожие ветки
← →
Walker (2002-11-27 07:00) [0]Мне нужно на время запретить вызов экранной заставки (моя программа работает в полноэкранном режиме)
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0); - не помогает
Как быть?
← →
BoxTer (2002-11-27 07:11) [1]// Включение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
// Выключение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
Кстати, SystemParametersInfo имеет еще кучу полезных ключей SPI_****, подробности см. в win32.hlp
← →
Walker (2002-11-27 07:33) [2]BoxTer СЛЕПОЙ ЧТО ЛИ?????
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0); - НЕ ПОМОГАЕТ
P.S. у меня тоже есть такая статья...
← →
SottNick (2002-11-27 07:58) [3]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
← →
Внук (2002-11-27 09:12) [4]>>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, а заставка вообще отключена). Посмотрите, что меняется в этой ветке при назначении и снятии заставки :))
Кроме того, может быть, в данном случае достаточно просто поставить большое время ожидания там же. И позаботиться о том, чтобы изменения в реестре вступили в силу сразу же.
← →
Walker (2002-11-27 12:36) [5]дело в том, что никакая программа не застрахована от фатальных сбоев, и менять что-то в реестре, не относящееся к моей программе, у меня нет желания, но если по другому нельзя (например заставить виду поверить в то, что заставка уже запущена, как это делают некоторые проигрыватели видео)... но я верю что можно... :)
А нсчёт Windows 95 Only поясню, в этих хелпах, кот. поставляются с Delphi описываются всего две версии Windows - 95 и NT. И там где написано Win95 Only надо читатать так: "не для технологии NT" (т.е. Win 95 Only будет работать и под Win9x).
← →
Walker (2002-11-27 13:01) [6]Спасибо всем... я тут немного помучался, вот что у меня получилось:
Предлагаю свой 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.
Страницы: 1 вся ветка
Текущий архив: 2003.02.06;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.01 c