Дуже часто потрібно, щоб програма запускалася разом з операційною системою. Це робиться в тих випадках, коли користувач постійно використовує програму, щоб заощадити його час.
Додавши програму в автозавантаження 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();
// додавання програми в Автозавантаження Windows
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);
SHFileOpStruct.pTo := StrPCopy(StartupPath, StartupPath);
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;