Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Открытие Заставки


Автор: vovan430 29.10.2005, 13:26
Помогите мне прогу написать короче открываю я свою программу и автоматически устанавливается заставка Windows которую я хочу, но не включается. Имя Заставки myProgect.scr. Желательно чтоб интервал у заставки был 1 мин.

Автор: Satana 29.10.2005, 15:18
vovan430 а ты не пробовал shellexecute использовать?
и еще интересно было бы погладеть как ты патаешься запустить заставку

Автор: vovan430 29.10.2005, 15:49
я если что тупой в этом деле и ничего из твоих слов не понял. Точнее напиши

Автор: Samhein 29.10.2005, 16:15
Код

function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,  Directory: PChar; ShowCmd: Integer): THandle;

Wnd Родительское окно, в котором отображаются сообщение запускаемого приложения
Operation: Указывает на строку с нулевым символом в конце, которая определяет выполняемую операцию: open(открыть), print(напечатать) или explore(открыть папку)
Filename - Указывает на строку которая определяет имя открываемого файла
parameters - Указывает на строку которая определяет передаваемые в приложение параметры
Directory - Указывает на строку которая определяет каталог используемый по умолчанию
ShowCmd - Определяет режим открытия указаного файла

Автор: vovan430 29.10.2005, 16:27
и что куда это вставлять и что сэтим делать?

Автор: Droll 29.10.2005, 16:46
Вам всего лишь надо сделать несколько настроек в реестре

Пример:
Код

...
uses
  Registry, ...;
...
procedure TForm1.Button1Click(Sender: TObject);
var
// Для записей в реестр
  Reg: TRegistry;
// Путь к хранителю экрана
  PathToSCR: string;
begin
// Если хранитель экрана лежит в той же папке,
// что и программа, то надо выполнить следующее:
  PathToSCR:= ExtractFilePath(ParamStr(0)) + 'myProgect.scr';
  Reg:= TRegistry.Create;
  try
// Открываем реестр
    Reg.RootKey:= HKEY_CURRENT_USER;
// Находим настройки экрана
    Reg.OpenKey('\Control Panel\Desktop\', True);
// Указываем хранитель экрана
    Reg.WriteString('SCRNSAVE.EXE', PathToSCR);
// Устанавливаем интервал в секундах
// 60 сек. = 1 мин.
    Reg.WriteString('ScreenSaveTimeOut', '60');
// Включаем хранитель экрана
    Reg.WriteString('ScreenSaveActive', '1');
  finally
// Освобождаем излишки
    FreeAndNil(Reg);
  end;
end;

Автор: vovan430 29.10.2005, 17:01
извините а куда этот код вставлять?
Добавлено @ 17:10
всё понял всё работает но заставка появляется в свойствах но она не установлена.

Автор: Droll 29.10.2005, 17:14
что значит
Цитата
... но она не установлена.
?

Автор: vovan430 29.10.2005, 17:20
мне надо чтоб в свойствах--заставка была моя заставка после нажатия кнопки.
Добавлено @ 17:22
а не другая. Чтоб не просто была а была она там активной.

Автор: Droll 29.10.2005, 21:26
вот оно в чем дело (по крайней мере, у меня последнее работает):

замените строчку
Код

PathToSCR:= ExtractFilePath(ParamStr(0)) + 'myProgect.scr';

на
Код

  PathToSCR:= ExtractShortPathName(ExtractFilePath(ParamStr(0)) +
    'myProgect.scr');


По некоторым причинам Windows устанавливает активным хранитель экрана только если путь к нему в формате 8,3.

Автор: Grol 30.10.2005, 01:03
Цитата(Droll @ 29.10.2005, 16:46)
Вам всего лишь надо сделать несколько настроек в реестре

Пример:
Код

...
uses
  Registry, ...;
...
procedure TForm1.Button1Click(Sender: TObject);
var
// Для записей в реестр
  Reg: TRegistry;
// Путь к хранителю экрана
  PathToSCR: string;
begin
// Если хранитель экрана лежит в той же папке,
// что и программа, то надо выполнить следующее:
  PathToSCR:= ExtractFilePath(ParamStr(0)) + 'myProgect.scr';
  Reg:= TRegistry.Create;
  try
// Открываем реестр
    Reg.RootKey:= HKEY_CURRENT_USER;
// Находим настройки экрана
    Reg.OpenKey('\Control Panel\Desktop\', True);
// Указываем хранитель экрана
    Reg.WriteString('SCRNSAVE.EXE', PathToSCR);
// Устанавливаем интервал в секундах
// 60 сек. = 1 мин.
    Reg.WriteString('ScreenSaveTimeOut', '60');
// Включаем хранитель экрана
    Reg.WriteString('ScreenSaveActive', '1');
  finally
// Освобождаем излишки
    FreeAndNil(Reg);
  end;
end;

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

Автор: vovan430 30.10.2005, 03:47
Всё работает спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)