Очень часто, нужно чтобы программа запускалась вместе с операционной системой. Это делается в тех случаях, если пользователь постоянно использует программу, чтобы сэкономить его время.
Добавив программу в автозагрузку Windows, не нужно переживать о том, что пользователь забудет её запустить самостоятельно. Таким образом, он всегда будет знать, что приложение запущено и он в любую секунду может приступить к работе с ним.
Содержание урока Delphi
- Добавление программы в автозагрузку
- Удаление программы из автозапуска
- Добавление программы в автозапуск без изменения реестра
- Удаление программы из папки автозапуска
- Добавление ярлыка программы в папку
- Удаление ярлыка программы из папки
Добавление программы в автозагрузку Windows
Для добавления программы в автозапуск в Delphi можно использовать следующий код:
uses
Registry;
procedure AddToStartup();
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True) then
begin
Reg.WriteString('MyApplication', 'C:\Path\To\MyApplication.exe');
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
Этот код использует класс TRegistry для доступа к реестру Windows и добавления записи в раздел реестра, который отвечает за автозапуск программ.
Чтобы вызвать эту процедуру при нажатии на кнопку, нужно просто добавить соответствующий вызов в обработчик события кнопки. Например:
procedure TForm1.btnAddToStartupClick(Sender: TObject);
begin
AddToStartup();
ShowMessage('MyApplication has been added to startup.');
end;
Этот код добавит программу в список автозагрузки, и при следующем включении компьютера она автоматически запустится.
Примечание.
Будьте внимательны при использовании данного подхода, поскольку добавление приложений в автозапуск может повлиять на время загрузки операционной системы и снизить производительность работы компьютера.
Удаление программы из автозапуска Windows
Для удаления программы из автозапуска Windows можно использовать следующий код:
uses
Registry;
procedure RemoveFromStartup();
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True) then
begin
Reg.DeleteValue('MyApplication');
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
Этот код удалит запись о программе из автозапуска в реестре Windows.
Чтобы вызвать указанную выше процедуру при нажатии на кнопку, нужно просто добавить соответствующий вызов в обработчик события кнопки. Например:
procedure TForm1.btnRemoveFromStartupClick(Sender: TObject);
begin
RemoveFromStartup();
ShowMessage('MyApplication has been removed from startup.');
end;
procedure TForm1.btnRemoveFromStartupClick(Sender: TObject);
begin
RemoveFromStartup();
ShowMessage('MyApplication has been removed from startup.');
end;
Этот код удалит ваше приложение из списка автозагрузки, и при следующем включении компьютера оно не будет автоматически запускаться.
Примечание.
Удалить программу из автозапуска можно и вручную. Для этого нужно открыть редактор реестра (regedit.exe) и удалить ключ со списком автозапуска в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.
Будьте внимательны при редактировании реестра, поскольку неправильные изменения могут привести к проблемам в работе операционной системы!
Добавление программы в автозапуск без изменения реестра
В Windows есть и другие способы добавления программ в автозапуск.
Чтобы добавить программу в автозагрузку без изменения реестра, нужно создать ее ярлык и поместить его в папку Startup в меню Пуск.
Для этого в Delphi можно использовать функции из библиотеки ShellAPI. Например, функция SHGetSpecialFolderPath может быть использована для получения пути в папку Startup, а функция SHFileOperation может быть использована для копирования ярлыка приложения в эту папку.
Вот пример кода на Delphi для добавления ярлыка программы в папку Startup:
uses
ShellAPI, ShlObj;
procedure AddToStartup();
var
StartupPath: array[0..MAX_PATH] of Char;
LinkName: string;
LinkDest: string;
SHFileOpStruct: TSHFileOpStruct;
begin
// Отримати шлях до папки "Startup"
if SHGetSpecialFolderPath(0, StartupPath, CSIDL_STARTUP, False) then
begin
LinkName := 'MyApplication.lnk'; // Назва ярлика
LinkDest := 'C:\Program Files\MyApplication\MyApplication.exe'; // Шлях до виконуваного файлу програми
// Створити структуру для запуску функції SHFileOperation
SHFileOpStruct.Wnd := 0;
SHFileOpStruct.wFunc := FO_COPY;
SHFileOpStruct.pFrom := PChar(LinkDest+#0);
SHFileOpStruct.pTo := PChar(StartupPath+#0);
SHFileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
// Скопіювати ярлик до папки "Startup"
if SHFileOperation(SHFileOpStruct) = 0 then
ShowMessage('MyApplication has been added to startup.');
end;
end;
Этот код создает ярлык программы с названием MyApplication.lnk и путем исполняемого файла C:\Program Files\MyApplication\MyApplication.exe, а затем копирует его в папку Startup с помощью функции SHFileOperation.
Чтобы вызвать эту процедуру при нажатии на кнопку в программе, нужно просто добавить соответствующий вызов в обработчик события кнопки. Например:
procedure TForm1.btnAddToStartupClick(Sender: TObject);
begin
AddToStartup();
end;
Этот код добавит ярлык программы в папку Startup одним нажатием на кнопку, что позволит автоматически запускать приложение при входе в систему.
Удаление программы из папки автозапуска
Для удаления ярлыка программы из автозапуска в Windows, если мы добавили его описанным выше способом, можно воспользоваться следующим кодом:
uses
Winapi.ShellAPI, Winapi.Windows;
procedure RemoveFromStartup(const AAppName: string);
var
LStartupPath: string;
LStartupLink: string;
begin
// Отримуємо шлях до папки автозапуску
LStartupPath := IncludeTrailingPathDelimiter(GetSpecialFolderPath(CSIDL_STARTUP));
// Формуємо шлях до ярлика
LStartupLink := LStartupPath + AAppName + '.lnk';
// Видаляємо ярлик з автозапуску
if FileExists(LStartupLink) then
SHDeleteFileEx(PChar(LStartupLink), nil, nil, SHF_NO_UI);
end;
Этот код также использует функцию GetSpecialFolderPath для получения пути к папке автозапуска, как и в случае добавления программы в автозапуск.
Далее мы формируем путь к ярлыку программы в папке автозапуска, добавляя к пути название ярлыка и расширение .lnk.
Затем мы вызываем функцию SHDeleteFileEx, которая удаляет ярлык из папки автозапуска. Она по-прежнему принимает путь к файлу, который нужно удалить, а также некоторые флаги.
Итак, если вы хотите удалить ярлык программы из автозапуска, добавленный описанным ранее способом, то можно вызвать функцию RemoveFromStartup, передав ей название ярлыка, который нужно удалить. Например:
RemoveFromStartup('MyProgram');
Это удалит ярлык MyProgram.lnk из папки автозапуска.
Добавление ярлыка программы в папку Startup Windows
В предыдущем примере мы добавляли приложение в папку автозапуска. Но лучше переносить в эту папку не саму программу, а ее ярлык. Это связано с тем, что файл программы может взаимодействовать с разными файлами, находящимися в корневой папке. А если его перенести за пределы этого каталога, то программа может перестать работать, или будет работать некорректно (например, если для ее работы требуется доступ к конфигурационному файлу: config.ini, configuration.ini и др.). Поэтому я рекомендую использовать следующий код, чтобы создать ярлык программы и поместить его в папку автозагрузки Windows:
uses
ShellAPI, ShlObj, ActiveX, System.Win.ComObj;
// функція для додавання ярлика програми в автозапуск
{$IFNDEF UNICODE}
function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: LPWSTR; nFolder: Integer; fCreate: BOOL): BOOL; stdcall; external 'shell32.dll' name 'SHGetSpecialFolderPathW';
{$ENDIF}
function GetSpecialFolderPath(const CSIDL: Integer): string;
var
Path: array [0..MAX_PATH] of Char;
begin
if SHGetSpecialFolderPath(0, Path, CSIDL, False) then
Result := Path
else
Result := '';
end;
procedure AddToStartup();
var
StartupPath: string;
LinkName: string;
LinkDest: string;
ShellLink: IShellLink;
PersistFile: IPersistFile;
begin
// Отримати шлях до папки "Startup"
StartupPath := IncludeTrailingPathDelimiter(GetSpecialFolderPath(CSIDL_STARTUP));
// Назва ярлика
LinkName := 'MyProgram.lnk';
// Шлях до виконуваного файлу програми
LinkDest := ExtractFilePath(Application.ExeName) + 'MyProgram.exe';
// Створити IShellLink об'єкт
ShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
// Встановити шлях до виконуваного файлу програми
ShellLink.SetPath(PChar(LinkDest));
// Отримати IPersistFile об'єкт
PersistFile := ShellLink as IPersistFile;
// Зберегти ярлик в папці "Startup"
PersistFile.Save(PWideChar(StartupPath + LinkName), True);
end;
Удаление ярлыка программы из папки Startup Windows
Щоб видалити створений ярлик MyProgram.lnk з папки автозапуску можна використати наступний код:
procedure RemoveFromStartup();
var
StartupPath: string;
LinkName: string;
begin
// Отримати шлях до папки "Startup"
StartupPath := IncludeTrailingPathDelimiter(GetSpecialFolderPath(CSIDL_STARTUP));
// Назва ярлика
LinkName := 'MyProgram.lnk';
// Видалити ярлик з папки "Startup"
DeleteFile(StartupPath + LinkName);
end; 