Прикалываемся с помощью Delphi

Здравствуй, читатель. В этой статье мы поговорим о компьютерных приколах, а точнее, мы сами напишем несколько программ-приколов на языке программирования Delphi и немного разберём эту среду разработки. Почему именно эту? Она наиболее простая для создания таких маленьких приложений, как программы-приколы. Кто из нас никогда не хотел приколоться над ближним своим так, чтобы он даже не заподозрил в вас виновника глючности своего компьютера? Благодаря этой статье вы сможете приколоть других и показать, какой вы прикольный программист. Меньше слов - больше дела!


Создаём вечный шаблон...

Для создания всего выше описанного нам потребуются:

  • Borland Delphi
  • компьютер
  • голова

Теперь разберём по пунктам. Delphi можно использовать любой. Мне из всех существующих версий больше нравится Delphi 2006, но его, к сожалению, найти не удаётся и я активно использую Delphi 5, поэтому на картинке вы можете лицезреть пятую версию, но, в общем, они почти не различаются, просто у более старших версий больше компонентов, удобнее дизайн и они более функциональные (например, в Delphi 2006 после того, как вы введёте "Begin" и нажмёте "Enter (ввод)", сразу же появится закрывающая часть "End;", т.е. не надо вводить её вручную). Компьютер нужен для теста созданных вами приколов - все ошибаются, и поэтому нужно сначала проверить программу на работоспособность у себя, чтобы не получилась ситуация, когда прикол сам себя выдал. И последний пункт - голова, куда без неё :)?

 

До описания самих приколов нужно усовершенствовать их, а точнее, сделать так, чтобы они себя не выдавали, т.е. прятались в системе и выполняли через некоторое время определённый код. Итак, открываем Delphi и разбираемся, что где находится.

Вверху находятся диалоги открытия/закрытия файлов (1) и панель компонентов (вкладки Standard, Additional, Win32 и т.д.) (2). Посередине находится главная форма или, просто, форма (3). На форме мы будем размещать компоненты, нужные для наших приколов. Слева находится инспектор объектов (Object Inspector) (4).

На инспекторе объектов вверху находятся две вкладки - Properties и Events (5). Кликнем по Events и в открывшемся списке находим OnActivate (6), кликнем дважды в поле ввода рядом и запишем код:

ShowWindow(Handle, SW_HIDE);
ShowWindow(Application.Handle, SW_HIDE);

Этот код спрячет программу, а точнее, сделает процесс. В этом коде вызывается функция "ShowWindow", в которой второй параметр равен SW_HIDE, т.е. требует спрятать окно.

Следующий шаг - таймер, благодаря которому наш код будет действовать через определённое время. Для этого есть компонент, который так и называется - таймер, он находится на вкладке "System" (7). Чтобы использовать таймер, надо проделать следующие шаги: на форму помещаем из палитры компонентов - вкладка "System", компонент, похожий на часики (нажимаем один раз на "System", потом опять нажимаем один раз на изображение часов и также один раз в любом месте формы). Компонент "Timer" позволяет через определённое время передавать управление вашему коду. Выделим его кликом и посмотрим на инспектор объектов (слева от формы).

Посмотрите на значение Interval=1000 (8). Это значит, что код, записанный в свойстве "OnTimer", будет вызываться каждые 1000 мсек, т.е. каждую секунду. Если вы хотите изменить время, через которое будет срабатывать ваш прикол, просто измените свойство "Interval". После всего проделанного весь код будет таким:

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics,
 Controls, Forms, Dialogs;
Type
 TForm1 = class(TForm)
 Timer1: TTimer;
 procedure FormActivate(Sender: TObject);
 procedure Timer1Timer(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
Implementation
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
begin
 ShowWindow(Handle, SW_HIDE);
 ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 // вот здесь будет находиться наш код
end;
end.

(Чтобы сверить, минимизируйте форму.) Думаю, пояснять нечего. Теперь самое время создать что-нибудь плохое :). И не забудьте сохранить проделанную работу как шаблон.


Вот такая антипиратия

Следующий пример - моя любимая шутка. Смысл его в том, что на компьютере жертвы стоит нелицензионная Windows. Но поскольку Билл Гейтс ушёл в отставку, то можно всем напомнить, что он всё ещё жив, естественно, программным путём. Следующий код надо поместить в наш шаблон (в процедуру таймера между "Begin" и "end" или два раза щёлкнуть по часикам), предварительно указав время, например, 1800000 (т.е. Interval=1800000):

MessageBox(0,' В ходе проверки вашей операционной системы на подлинность, выяснилось, что на вашем компьютере установлена нелицензионная Windows. Купите лицензионную Windows Vista', 'Билл Гейтс', 0);

(Весь код, представленный выше, переписывается в строчку, иначе программа не будет работать.) И каждые 1800000 мсек, т.е. каждые 30 мин, будет появляться окошко, которое представлено на картинке. Скомпилируйте программу (Ctrl+F9) и наслаждайтесь.

(Примечание: видите на панели задач, рядом с "Билл Гейтс", иконку? Эта иконка присваивается по умолчанию ко всем программам, написанным на Delphi. Чтобы изменить, надо, когда выделена форма, найти на "инспекторе объектов" свойство "icon", дважды щёлкнуть рядом на "none" и в открывшемся окне найти в вашем компьютере подходящую иконку. Иконка должна быть размером 32х32. Вы можете сами придумать и нарисовать иконку для своей программы: откройте "imagedit", выберите File > New > Icon file и рисуйте.)


Бешеный сидюшник

Вот вы представьте лицо человека, у которого только что открылся CD-привод без его прямого участия и через некоторое время закрылся и так до бесконечности. Представили? А я даже смог увидеть благодаря следующей программе. Открываем наш шаблон. В Interval приписываем своё число, например, 5000 (5 сек.). Дважды щёлкаем по часикам и в открывшееся окошко заносим код, представленный ниже:

mciSendString('Set cdaudio door open wait', nil, 0, handle);
sleep(3000);
mciSendString('Set cdaudio door closed wait', nil, 0, handle);

Почти готово, но для работы в самом начале кода программы найдите раздел "Uses" и в него поместите следующий код:

MMSystem;

В этом модуле (MMSystem) содержатся необходимые для работы программы функции работы с CD. В данном примере первая строка кода открывает CD, вторая делает задержку в 3 секунды, а третья закрывает CD. И не забудьте (если вы открывали не шаблон) прописать в процедуру OnActivate скрытие программы.


Исчезающий диспетчер задач Копперфильда

Хоть мы и прячем программу от глаз жертвы, но против диспетчера задач она бессильна, т.е. жертва вполне может нажать заветную комбинацию клавиш Ctrl+Alt+Del, выбрать в диспетчере задач вкладку "процессы" и удалить любой процесс, в том числе и нашу беспокойную программу. Так давайте сделаем так, чтобы при каждом открытии диспетчера задач он закрывался. Открываем наш шаблон (где уже скрыта форма). Устанавливаем значение Interval, равное 500 (половина секунды), в процедуру таймера заносим код:

procedure TForm1.Timer1Timer(Sender: TObject);
var a:HWND;
begin
a:=FindWindow(nil,'Диспетчер задач Windows');
if a<>0 then SendMessage (a, WM_DESTROY,0,0);
end;

Сейчас всё объясню. В данной программе переменной "a" присваивается значение функции "FindWindow". Сама функция "FindWindow" служит для поиска окна с заголовком "Диспетчер задач Windows". Проще говоря, переменной "a" присваивается найденное окно с заголовком "Диспетчер задач Windows". Дальше проверяется: если окно найдено, т.е. не равно нулю (if a<> 0), тогда найденному окну (a) передаётся сообщение уничтожиться (WM_DESTROY) с помощью команды SendMessage (передать сообщение). Кстати, уничтожить можно любое окно, главное - знать его имя. К сожалению, показать работу примера картинкой не могу :).

(Примечание: не спешите создавать программу-компаньон для ваших приколов, т.к. это (исчезновение окна) можно совместить с основной программой, просто создайте на форме ещё один компонент таймера и внесите в него код, представленный выше. Тоже верно, что вашу зло-программу можно защитить от любого закрытия или удаления со стороны подкалываемого, в смысле всегда закрывать, например, "Мой компьютер" или "Total Commander".)


Прописка по адресу

В предыдущих примерах заставить программу выполняться вместе с загрузкой компьютера вы могли, только поместив на неё ярлык в автозагрузку (папку, которая находится в документах или Пуск>Программы>Автозагрузка). Но в автозагрузку можно прописаться и через реестр, чем мы сейчас и займёмся. Открываем шаблон и дописываем так, чтобы получилось, как представлено ниже:

procedure TForm1.FormActivate(Sender: TObject);
{1}var Regini:TReginifile;
begin
ShowWindow(Handle, SW_HIDE); {прячу программу}
ShowWindow(Application.Handle, SW_HIDE); {то же самое}
{2}regini:=treginifile.create('Software');
{3}regini.rootkey:=hkey_local_machine;
{4}regini.openkey('Software',true);
{5}regini.openkey('Microsoft',true);
{6}regini.openkey('Windows',true);
{7}regini.openkey('CurrentVersion',true);
{8}regini.writestring('RunServices','svchost.exe',
Application.exename);
{9}regini.free;
end;

Поясняю всё по пунктам:

  1. Вносим переменную "Regini" типа "TReginifile".
  2. Инициализируем переменную "regini" для работы с реестром.
  3. Открываем раздел реестра "hkey_local_machine" (один из главных разделов).
  4. Открываем подраздел "Software".
  5. Открываем подраздел "Microsoft".
  6. Открываем подраздел "Windows".
  7. Открываем подраздел "CurrentVersion".
  8. Создаём подраздел "RunServices" и прописываем в него программу с именем "svchost.exe".
  9. Освобождаем реестр.

Для полной работы в раздел "Uses" занесите модуль "Registry", в нём содержатся функции, которые мы используем в программе.

Вот теперь, если запустить программу, она пропишется в автозагрузку. Главное, чтобы имя программы было svchost.exe (как у меня), если вы захотите изменить имя или использовать своё, то измените его и в коде (пункт 8). Сейчас можно сохранить проделанную работу как новый шаблон, более лучший. Помните, программа пропишется в автозагрузку из того места, откуда она запустилась. Если вы перенесёте программу в другое место, то запускаться вместе с системой она не будет (пока её опять не активируют). Чтобы удалить программу из автозагрузки, зайдите в реестр по адресу "HKEY_LOCAL_MACHINE/Software/Microsoft/ Windows/CurrentVersion/RunServices" и удалите ключ с именем вашей программы.

(Примечание: помните, если наша жертва загрузит компьютер в безопасном режиме, то автозагрузка не сработает, и если она (жертва) найдёт программу в реестре (что вряд ли ;)) и удалит ключ, то программа, опять же, не будет автозагружаться вместе с компьютером до следующего запуска.)


Скажи своё слово!

Следующая программа изменит привычное всем "Пуск" на любое ваше слово, но состоящее из 4 букв. Поставьте на форму всего одну кнопку и по событию "onClick" впишите код:

procedure TForm1.Button1Click(Sender: TObject);
Var Panel, Knopka:hwnd; {1}
begin
panel:=FindWindow('shell_traywnd', nil); {2}
knopka:=FindWindowEx (panel, 0, 'button', nil); {3}
SetWindowText(knopka,'глюк'); {4}
ShowWindow(knopka, SW_HIDE); {5}
ShowWindow(knopka, SW_show); {6}
end;

Всё по порядку:

  1. Объявляю 2 переменные, которые будут использоваться для хранения самой кнопки и панели задач, на которой она находится.
  2. Значению переменной "Pаnel" присваиваю результат функции "findwindow", которая ищет окно по параметрам. Параметры функции - имя класса окна и само имя окна.
  3. Значению переменной "knopka" присваивается результат поиска "Пуска".
  4. Изменяю надпись на кнопке ("Глюк").
  5. Прячу кнопку.
  6. Показываю кнопку.

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


Весёлый скрин

Многие знают такую шутку: делается скриншот рабочего стола, устанавливается он как обои, удаляются все значки на рабочем столе. Сейчас мы сделаем нечто подобное, но программой. Выше описанные действия делать не будем, а пойдём другим путём. Для начала сделайте скриншот рабочего стола и сохраните его с расширением bmp. Создайте новое приложение. В свойствах формы измените следующие параметры:

  • "Height" и "Width" на значения выше разрешения вашего экрана (обязательно выше разрешения, например, если у вас разрешение 1024х1280, то свойства задайте, как минимум, 1300 и 1300, соответственно);
  • "FormStyle" измените на "fsStayOnTop" (окно всегда будет располагаться поверх других);
  • "Border style" на "bsNone" (чтобы не было никаких обрамлений у окна, это же рабочий стол:);
  • "Left"=0;
  • "Top"=0;
  • "WindowState" на "wsMaximized";
  • "AutoSize" на "True".

Потом поставьте на форму компонент "TImage" с вкладки "Additional" и поставьте свойство "AutoSize" на "True". Далее находите свойство "Picture" два раза кликаете рядом и загружаете заготовленное ранее изображение. Ctrl+F9 и программа готова без строчки кода!


Заключение

В этой статье я постарался максимально подробно рассказать, как создавать программы-приколы. Также мы немного рассмотрели интересную среду разработки программ Borland Delphi.

Если вы знаете, как можно пошутить программным путём, или хотите узнать ещё о прикольных программах, пишите!

(Продолжение следует)

Резидент Николай,
rezidentnik@gmail.com

Версия для печатиВерсия для печати

Номер: 

36 за 2008 год

Рубрика: 

Азбука программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Страницы

Аватар пользователя Вик
По поводу диспетчера задач:

Проблема возникнет когда эту шутку запустят под английскими виндами, ведь никакого заголовка "Диспетчер задач Windows" там нет. Тогда уже лучше искать и убивать процесс taskmgr.exe, а заодно уже вписать наиболее популярные заменители типа Process Explorer от Sysinternals. Тогда програмулька получится более универсальной :)))))))

Аватар пользователя Вик
Был еще такой старинный прикол:

На какой-нибуть часто используемый ярлык вешается програмка, которая всего-навсего начинает быстро перечислять все файлы найденные в системной папке, а в заголовке написано "Удаление системных файлов". При этом имеется кнопка Отмена при нажатии которой ничего не происходит. Реакция юзера превзойдет все ваши ожидания :))))

Аватар пользователя mike
В статье не сказано, кто может быть этим приколистом. Однако, ясно: СИСАДМИН!

А как бы вкинул автор это паскудство на МОЙ личный комп?

Аватар пользователя Rezident Nik
1 сообщение: в основном на русском языке работают те кто плохо разбираются в компах и не сразу поймут что их накололи. Те кто нормалько разбираются сидят в основном под Линуксом.

2 сообщение: спасибо, подумаю

3 сообщение: паскудством было бы поставить появление сообщения (1 прикол)каждую секунду, послать на мыло, после запуска прописать в автозагрузку, сделать условие после которого прикол активизирутся (что бы не заподозрили в виновности появления сообщений нашу прогу. Но самое трудное заставить человека запустить программу полученную с нета, поэтому надо иметь доступ к компу, что бы всё подстроить по удобнее.

Аватар пользователя Вик
Цитата: "в основном на русском языке работают те кто плохо разбираются в компах и не сразу поймут что их накололи."

А как насчет тех, кто плохо разбираются, но работают в английских виндах по одной только причине отсутствия русских, например, за границей? :)))

Аватар пользователя mike
>надо иметь доступ к компу...

Да кто ж его даст? :)))

Аватар пользователя Fedor78
Для любителей Linux есть Kylix :)
Аватар пользователя Инкогнито
>Да кто ж его даст? :)))

Так тут никто и не собирается трояна садить. Все расчитано на безобидную шутку, которая пригодится, например, при копировании фильма на флешку у знакомого...

Аватар пользователя mike
>расчитано на ... копирование фильма на флешку у знакомого...

?? Для этого надо, чтобы при копировании фильма на флэшку записался бы ещё и экзешник + авторан. Но он обнаруживается, как только вставишь флэшку в комп!

Аватар пользователя Инкогнито
Ну допустим авторан тоже не обязательно видимым делать, но я имел ввиду, что если действительно знакомый человек, то он не будет с подозрением относиться к твоим действиям (таким как копирование шутки на винт)... Лично я доверяю своим знакомым потрошить мой ноут (если я, конечно, знаю, что они понимают, что делают), а если они принесут какую-нить шутку, ну что ж - это просто шутка. Если же сотворят что-то серьезное, ну что ж, полечу цацку и переведу сотворившего в разряд непонимающих :)))

Страницы