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

В статье "Как отомстить "врагу" средствами Windows.pas" я обещал рассказать, как добавить приложение в StartUp. Так что читайте и впитывайте. Сейчас мы разберем несколько вариантов алгоритма.
Можно просто скопировать исполняемый файл в папку "Автозагрузка", узнав ее местонахождение с помощью функций модуля 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 для шрифтов и т.д.

А теперь более простой способ - запись ключа в секцию Run реестра. Ниже в одной процедуре совмещено и его создание, и удаление.


Uses Registry;  
//............  
  
procedure ChangeReg(StrName: ShortString; delete: boolean);  
var  
reg: TRegistry;  
begin  
Reg := nil;  
try  
reg := TRegistry.Create;  
reg.RootKey := HKEY_LOCAL_MACHINE;  
reg.LazyWrite := false;  
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false);  
if not delete then reg.WriteString(StrName, Application.ExeName)  
else reg.DeleteValue(StrName);  
reg.CloseKey;  
reg.free;  
except  
if Assigned(Reg) then Reg.Free;  
end;  
end;  
  
procedure TForm1.AddBtnClick(Sender: TObject);  
begin  
ChangeReg('My App',false); //добавляем в Автозагрузку  
end;  
  
procedure TForm1.RemoveBtnClick(Sender: TObject);  
begin  
ChangeReg('My App',true); //удаляем из Автозагрузки  
end;  

Вот и всё. Если что не удалось - пишите, мы вам поможем.

Автор: Трофим Роцкий
Теги:
StartUp, begin, StrName, CSIDL, folder, папку, false, ChangeReg, procedure, Windows, delete, TRegistry, файла, функции, SHGetSpecialFolderLocation, врагу, ShlObj, помощью, Автозагрузка, отомстить, TForm1, TObject, Sender, CloseKey, реестра, Автозагрузки, удалось, Registry, совмещено, процедуре, пишите, ключа, секцию, ShortString, поможем
Добавлено: 19 Июля 2018 21:55:26 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...