Delphi. Трюки и эффекты - страница 78

Шрифт
Интервал

стр.

Автозапуск программ

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

Итак, в ветвях реестра HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE находятся разделы Software\Microsoft\Windows\CurrentVersion\Runи Software\ Microsof t\Windows\CurrentVersion\RunOnce. В первом (Run) сохраняются пути приложений, запускаемых при каждой загрузке Windows. В разделе же RunOnce обычно регистрируются приложения типа инсталляторов, которые запускаются при первой с момента регистрации перезагрузке Windows, но до запуска программы Проводник. При запуске приложения, зарегистрированного в ключе RunOnce, соответствующая запись из этого раздела автоматически удаляется.

От выбора ветви реестра (HKEY_LOCAL_MACHINE ИЛИ HKEY_CURRENT_USER) зависит, в сеансе всех ли пользователей будет запускаться приложение.

Рассмотрим создание простейшей программы, способной определить, запускается ли она автоматически, а если запускается, то каким образом. Программа также будет уметь создавать и удалять параметры в нужных разделах реестра для задания нужного режима запуска.

Пусть на форме приложения расположены три переключателя (рис. 7.9). Процедура, приведенная в листинге 7.16, устанавливает состояния переключателей в зависимости от того, в каком разделе ветви HKEY_LOCAL_MACHINE расположен параметр с именем, совпадающим с именем программы (это условность, котора я нужна для работы нашего примера).

Рис. 7.9. Форма после определения варианта режима запуска приложения

...

Листинг 7.16.

Определение режима запуска приложения

procedure TForm1.GetRunMode();

var

reg: TRegistry;

begin

reg := TRegistry.Create();

reg.RootKey := HKEY_LOCAL_MACHINE;

//Определение, как запускается программа (по наличию значений

//в соответствующих разделах)

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\Run\',

False)

then

begin

if reg.ValueExists(Application.Title) then

begin

//Программа есть в разделе Run —

//запускается при каждой загрузке Windows

optAutoRun.Checked := True;

reg.CloseKey();

Exit;

end;

reg.CloseKey();

end;

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

RunOnce\', False)

then

begin

if reg.ValueExists(Application.Title) then

begin

//Программа есть в разделе RunOnce —

//запускается один раз при старте Windows

optRunOnce.Checked := True;

reg.CloseKey();

Exit;

end;

reg.CloseKey();

end;

//Автозапуск программы (рассматриваемым способом) не включен

optRunNone.Checked := True;

reg.Free();

end;

Параметры запуска изменяются (в рассматриваемом приложении) при нажатии кнопки Применить (листинг 7.17).

...

Листинг 7.17. Применение режима запуска

procedure TForm1.cmbApplyClick(Sender: TObject);

var

reg: TRegistry;

begin

reg := TRegistry.Create();

reg.RootKey := HKEY_LOCAL_MACHINE;

//Отмена прошлого режима

//..удаление параметра из раздела Run

if not optAutoRun.Checked then

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

Run\', False)

then

begin

reg.DeleteValue( Application.Title );

reg.CloseKey();

end;

//..удаление параметра из раздела RunOnce

if not optRunOnce.Checked then

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

RunOnce\',False)

then

begin

reg.DeleteValue( Application.Title );

reg.CloseKey();

end;

//Установка нового режима (создание параметра в соотвествующем

//разделе)

if optAutoRun.Checked then

//..добавление параметра в раздел Run

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

Run\', True)

then

begin

reg.WriteString( Application.Title, Application.ExeName);

reg.CloseKey();

end;

if optRunOnce.Checked then

//..добавление параметра в раздел RunOnce

if reg.OpenKey(\'Software\Microsoft\Windows\CurrentVersion\

RunOnce\',True)

then

begin

reg.WriteString( Application.Title, Application.ExeName);

reg.CloseKey();

end;

//Для верности обновим показания на форме по данным из реестра

GetRunMode();

reg.Free();

end;

При желании вы можете изменить ветвь реестра на HKEY_CURRENT_USER, если приложение (которое вы будете делать) запускалось только для определенных пользователей.


стр.

Похожие книги