Приколюємося за допомогою Delphi

(Продовження, початок в № 36 )

Привіт читачам самої газети новин зі світу IT-технологій! У минулій частині програм-приколів ми трохи розібралися з середовищем розробки додатків - Borland Delphi, створили шаблон і закріпили отримані знання практикою. Сьогодні створимо ще парочку програм, за допомогою яких ви зможете розіграти своїх друзів.


Класика жанру

Наступний прикол один з найпоширеніших у світі програм-приколів, коротше - класика. По-іншому її можна назвати ще опитувальником, а принцип такий: коли користувач хоче навести курсор мишки на кнопку, вона тікає від нього. Ви запитаєте, до чого тут опитувальник? Відповідаю: вікна і назвою програми привласнюється ім'я "Чи задоволені ви своєю зарплатою?" і на формі є дві кнопки з відповідями "Так" і "Ні", наївний користувач хоче натиснути "Ні", але не тут-то було, кнопка "Ні" починає тікати від курсора мишки. Але тому що цей приклад можна де завгодно завантажити і не напружуватися, ми переробимо його по-своєму. Для початку в новій програмі змініть ім'я вікна (клацніть один раз за формою і в інспектора змініть властивість "Cаption" на "Вікно"), потім на вкладці "Events" знайдіть подія "OnCloseQuery", створіть обробник події і внесіть в нього код:

procedure TForm1.FormCloseQuery (Sender: TObject; var CanClose: Boolean); begin // забороняю програмі бути закритою звичайним способом canclose: = false; end;

Завдяки цим кодом наше вікно не закриєш, але це тільки для недосвідченого користувача, тому що можна легко викликати диспетчер задач і закрити програму. Далі на вкладці "Standart" знайдіть компонент "ТLabel" і поставте його на нашу форму. Потім в об'єктному інспектора змініть властивість "Cаption" (як у форми) на "Щоб закрити вікно, натисніть відповідну кнопку". Потім створіть на формі кнопку (TButton) і так само змініть властивість "Cаption" на "Закрити вікно". Справа залишилася за малим - змусити кнопку тікати від курсора. Щоб це зробити, виділіть кнопку, зайдіть на вкладку "Events", два рази клацніть поруч з подією "onMouseMove" (ця подія виконується кожен раз, коли курсор наводиться на кнопку) і впишіть код:

procedure TForm1.Button1MouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer); var i: integer; begin i: = random (4); case i of 0: Button1.Left: = Button1.Left + Button1.Width; 1: Button1.Left: = Button1.Left-Button1.Width; 2: Button1.Top:=Button1.Top+Button1.Height; 3: Button1.Top:=Button1.Top-Button1.Height; end; if Button1.Left <0 then Button1.Left: = 0; if (Button1.Left + Button1.Width)> Form1.Width then Button1.Left: = Form1.Width-Button1.Width; if Button1.Top <0 then Button1.Top:=0; if (Button1.Top + Button1.Height)> Form1.Height then Button1.Top:=Form1.Height-Button1.Height; end;

Спочатку ми оголошуємо змінну "i" типу "integer" (тип цілих чисел). Потім ми цієї змінної присвоюємо випадкове число в діапазоні від 0 до 3 (в Delphi відлік зазвичай починається з нуля). Наступним оператором, в залежності від значення "i", програма виконує дії зміни положення кнопки (додати / відняти значення лівого / верхнього положення кнопки). Потім ми перевіряємо, де кнопка, щоб вона не пішла за межі форми. Якщо ви трохи знаєте англійську, то вам не складе труднощів розібратися в коді. А якщо ні, то товстий словник вам в руки! Загалом, розбиратися і не треба, прикол і так буде працювати, тільки якщо ви хочете самі змінювати код. Для повної завершеності програми треба додати код за подією кнопки "onClick":

procedure TForm1.Button1Click (Sender: TObject); begin messagebox (0, 'Що б закрити вікно викличте диспетчер задач і виділивши програму, натисніть "зняти задачу"', 'Як закрити вікно', 0); end;

Цей код буде підказкою для тих, хто зуміє натиснути на кнопку. До речі, я після півгодинного тренування зміг. Скріншот роботи програми можете побачити нижче. Зверніть увагу, де знаходиться кнопка, хоча спочатку вона була посередині. І є ще один нюанс - щоб натиснути на кнопку, досить натиснути на клавіатурі "Enter". Щоб прибрати цю можливість, треба встановити замість звичайної кнопки (TButton) кнопку "TSpeedButton" з вкладки "Additional" і повторити всі дії.


Вісім ?!

Ні для кого не секрет, що Windows - сама частозавісаемая система (ще сама BSOD'шная, ну да ладно), але от щоб віруси в ній висіли - це перебір. Ось зараз і реалізуємо цей самий "перебір". Ні, вірус робити не будемо, тому що це вже не жарт.

Створіть нову програму. Змініть властивість форми "Cаption" на "Вірус (програма не відповідає)" і розтягнути форму по всьому екрану. Далі створіть обробник події "OnCloseQuery" і занесіть в нього код з попереднього прикладу (нам треба, щоб програма не закривати звичайним шляхом):

procedure TForm1.Button1Click (Sender: TObject); procedure TForm1.FormCloseQuery (Sender: TObject; var CanClose: Boolean); begin // забороняю програмі бути закритою звичайним способом canclose: = false; end;

Також властивість форми "FormStyle" змініть на "fsStayOnTop", щоб програма відображалася поверх інших вікон. Далі відкрийте будь-який графічний редактор, наприклад, Paint, і створіть картинку, схожу на кнопку закриття (білий хрест на червоному тлі) розміром майже з ваш екран, розширення у зображення повинно бути .bmp. Потім з вкладки "Additional" помістіть на форму компонент "TImage". Двічі клацніть по ньому і у вікні, завантажте заготовлене раніше зображення. Розтягніть зображення по всій формі. Все, програма готова. Компілюйте і підсовуйте жертві. Зображення моєї програми можете побачити на рис .:


Чи не свій гвинт - не шкода

А в цьому приколі ми будемо смітити на чужому гвинті. Ви тільки уявіть: у кореневому каталозі диска C щонайменше 1000 файлів - як? А якщо їх більше? Ось зараз і реалізуємо. Якщо ви зберегли шаблон, який ми створили в минулій статті, то саме час їм скористатися, якщо немає, то доведеться все робити заново. На новій формі встановіть два компонента: "TTimer" з вкладки "System" і "TMemo". Потім клацніть по формі, зайдіть на вкладку "Events", натисніть двічі поруч з "OnActivate" і введіть код:

procedure TForm1.FormActivate (Sender: TObject); begin ShowWindow (handle, SW_HIDE); ShowWindow (Application.Handle, SW_HIDE); end;

Цими діями ми приховали нашу програму. Виділіть "TTimer", у властивості "Interval" встановіть значення "1" (дію буде виконуватися кожну одну тисячну секунди або тисячу дій в секунду). Зайдіть на вкладку "Events" об'єктного інспектора і клацніть 2 рази навпроти єдиної процедури "OnTimer" і у вікні, введіть наступний код:

procedure TForm1.Timer1Timer (Sender: TObject); var i: LongInt; begin i: = random (999999999); memo1.lines.clear; memo1.lines.strings [0]: = ( 'файл був створений -' + (IntToStr (i))); Memo1.lines.SaveToFile ( 'C: \' + IntToStr (i) + '. Dat'); end;

Пояснюю. Створюю змінну "i" типу "LongInt". Привласнюю "i" випадкове значення в діапазоні від 0 до 999999999. Очищаю поля вода "Memo1" і привласнюю першому рядку (пам'ятаєте, я говорив, що відлік починається з нуля) "файл був створений -" і до цього додаю значення "i". Потім зберігаю в файл все, що міститься в "Memo1", тому на початку процедури ми і очищали "Memo1". Взагалі, текст може бути будь-який, наприклад, "запий холодною водою вільне місце на диску" і т.д. На завершення роботи над програмою виділіть "Memo1" і змініть властивість "Visible" на "True".

У мене програма за 10 секунд створила приблизно 650 файлів загальним обсягом 2.5 Мб. Мало? А ви уявіть, жертва всядеться грати в Counter-Strike на годину, тоді вийде 234 тис. Файлів з об'ємом майже 1 Гб. Але ось тільки коли я тестував, ресурси комп'ютера були вільні, а якщо грати, то на програму залишиться мало. Але якщо жертва не заглядає до себе на жорсткий диск, то і цього цілком вистачить.

До речі ми вказали в програмі, що файли будуть створюватися в кореневому каталозі диска "С:", але можна і дописати шлях. Наприклад - 'C: \ Windows', і розмір папки "вийми-да-поклади" буде рости і рости, як фінанси в Microsoft.


Як би висновок

Всі жарти, описані в цій статті, показують, як з нешкідливих властивостей і рядків коду можна підняти собі настрій, а може, не тільки собі (застосуєте жарти в офісі, всі біди переведіть на страшні віруси - нехай ваш адмін помучиться, головне не переборщити) .

Хоч жарти прості і їх можна запросто відключити чарівним диспетчером задач, але ніхто не заважає вам їх доопрацювати - перечитайте минулої частина "приколюються за допомогою Delphi" і з її допомогою додайте автозагрузку і "автозакриваніе" диспетчера задач. Або, наприклад, в жарті зі скріншотом можна створити обробник події руху миші (як в попередньому випадку) і при кожному русі мишки виводити повідомлення (messagebox) типу "Я новий вірус, не смій чіпати мишку, не те засмічень гвинт" і вставити лічильник ( як би терпіння), після заповнення якого буде відбуватися реальне засмічення (код з передостаннього прикладу). Або замість звичайного скриншота зробити "синій екран смерті". Ось пограєте у кого-то на нервах.

Але, ще раз повторю, головне не переборщити - небажано, щоб жертву вивозили на машині "швидкої допомоги". Крім того, всьому є межа, навіть жарту. Хоча, все в ваших руках!

Читайте "Комп'ютерні вести", приколюють і пишіть мені на адресу електронної пошти, якщо хочете що-небудь запропонувати або знаєте відмінний спосіб пожартувати.

(Далі буде)

Резидент Микола, [email protected]

Ви запитаєте, до чого тут опитувальник?
Відповідаю: вікна і назвою програми привласнюється ім'я "Чи задоволені ви своєю зарплатою?
Вісім ?
Ви тільки уявіть: у кореневому каталозі диска C щонайменше 1000 файлів - як?
А якщо їх більше?
Мало?