Добавляем приложение в Автозагрузку, в Автозапуск в Delphi

Добавляем приложение в Автозагрузку

Можно просто скопировать исполняемый файл в папку «Автозагрузка», узнав ее местонахождение с помощью функций модуля ShlObj.pas.

program StartUp;
{$APPTYPE CONSOLE}
uses
  ShlObj, SysUtils, Windows;
var
  Folder: Pchar; //путь к StartUp
  List: PitemidList; //список "специальных" папок
begin
  //ищем папку
  SHGetSpecialFolderLocation(0,CSIDL_STARTUP,List);
  new(folder);
  SHGetPathFromIDList(List,folder);
  //Нашли? Переходим в директорию StartUp
  ChDir(folder);
  //копируем файл
  CopyFile(PChar(ExtractFilePath(paramStr(0)) + 'StartUp.exe'), 'StartUp.exe', true); //укажите имя своего EXE файла
end.

Теперь загляните в папку «Автозагрузка». Если вы указали в функции имя СВОЕГО файла, он должен быть уже там :) .

Обратите внимание на три выделенных строки. С их помощью можно найти путь к любой системной папке, указав в функции SHGetSpecialFolderLocation соответствующую константу: CSIDL_DESKTOP для рабочего стола, CSIDL_FONTS для шрифтов и т.д.

Добавляем приложение в Автозапуск.

Способ 1

uses
  Registry;
  
{$IFNDEF WIN32}
  const MAX_PATH = 144; 
{$ENDIF} 
              
procedure TForm1.Button1Click(Sender: TObject); 
var
  reg: TRegistry; 
begin
  reg := TRegistry.Create; 
  reg.RootKey := HKEY_LOCAL_MACHINE; 
  reg.LazyWrite := false; 
  reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false); 
  reg.WriteString('My App', Application.ExeName); 
  reg.CloseKey; 
  reg.free; 
end;

Способ 2

sProgTitle: Название для программы;
sCmdLine: Имя EXE файла с путем доступа;
bRunOnce: Запустить только один раз или постоянно при загрузке Windows;

procedure RunOnStartup(sProgTitle, sCmdLine : string; bRunOnce : boolean );
var
  sKey : string;
  reg  : TRegIniFile;
begin
  if (bRunOnce) then sKey := 'Once'
  else sKey := '';
  reg := TRegIniFile.Create('');
  reg.RootKey := HKEY_LOCAL_MACHINE;
  reg.WriteString('Software\Microsoft'+'\Windows\CurrentVersion\Run' + sKey + #0,sProgTitle,sCmdLine);
  reg.Free;
end;

Например:

RunOnStartup('Title of my program','MyProg.exe',False);

Примечание. Этот пример удобно использовать при написании деинсталляторов — добавить однократный вызов деинсталлятора и запросить от пользователя перезагрузку. Этот прием позволит безболезненно удалять DLL и им подобные файлы, которые обычном способом удалить невозможно (они загружены в силу того, что использовались деинсталлируемой программой или работают в момент деинсталляции).

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (18 оценок, среднее: 5,00 из 5)
Загрузка...
Добавить комментарий