LPT терминатор – программа дистанционного управления компьютером.
А теперь перейдём к самому любимому занятию студентов и практикантов – разыгрывать ламеров. Оно, конечно, все мы в той или иной степени ламеры, однако это вовсе не означает что нужно сидеть сложа руки (под яблоней), ожидая когда придёт озарение или посыпеться манна небесная, дабы таким способом поднять свой профессиональный уровень и показать однокурсникам где коды зимуют.
И так, открываем Делфи и изучаем одну небезынтересную программу – LPTterminator
Работает она так: когда на соответствующем входном бите LPT порта появляется логический ноль программа, которая благодаря настройкам может быть невидима, после срабатывания датчика, пославшего соответствующую команду, выводит устрашающее окно с мигающей надписью “ИГРА ОКОНЧЕНА !” и полем ввода пароля. Если пароль введён правильно – действие команды будет отменено и покажется главное окно программы с настройками. Если же нет – тогда по истечении времени ввода пароля будет исполнено соответствующие действие.
Один мой знакомый, в своё время, незаметно подключил в жгут проводов вместо поломанного на тот момент принтера компа своего препода, детектор радиоизлучения (на основе польского антенного усилителя) к подобного типа программе,( немного модифицированной чтобы в ALT + CTRL + DEL её не было видно и с автозагрузкой через реестр и без заставки ) и когда у него звонил мобильник – компьютер просто выключался! Дошло до того, что препод во время лекций вообще выключал мобильник. И сейчас мы рассмотрим аналогичный пример.
Смотрим код::
Рассмотрим модуль Form1 (Unit1) :
[pas]{Опрашиваем датчики на входах порта}procedure TForm1.Timer1Timer(Sender: TObject);
begin
if SpeedButton1.Tag = 0 then //–если не отключено тогда:
begin
CheckBox1.Checked := not Pin10; //–если на 10 ножке логический 0 тогда галочка
CheckBox2.Checked := not Pin11; //–аналогично
CheckBox3.Checked := not Pin12;
CheckBox4.Checked := not Pin13;
CheckBox5.Checked := not Pin15;
{проверяем наличие галочки на любом из чекбоксов}
if (CheckBox1.Checked = true) or //– or – значит "или"
(CheckBox2.Checked = true) or
(CheckBox3.Checked = true) or
(CheckBox4.Checked = true) or
(CheckBox5.Checked = true) then //–если ДА тогда:
begin
Timer1.Enabled := false; //– выключаем таймер опроса
Form1.Hide; //–скрываем главную форму
Form2.ShowModal; //–показываем форму2 "ИГРА ОКОНЧЕНА !"
end ;
end ;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
Timer1.Interval := SpinEdit1.Value *1000; //–установка частоты опроса датчиков
end ;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if SpeedButton1.Tag = 0 then //–выключаем
begin
SpeedButton1.tag := 1;
CheckBox1.Enabled := false;
CheckBox2.Enabled := false;
CheckBox3.Enabled := false;
CheckBox4.Enabled := false;
CheckBox5.Enabled := false
end else
begin
SpeedButton1.tag := 0; //–включаем
CheckBox1.Enabled := true;
CheckBox2.Enabled := true;
CheckBox3.Enabled := true;
CheckBox4.Enabled := true;
CheckBox5.Enabled := true;
end ;
end ;
procedure TForm1.FormActivate(Sender: TObject);
begin
Application.HintColor := cllime;
end;
procedure TForm1.SpinEdit3Change(Sender: TObject);
begin
Form2.Label1.Caption := IntToStr(SpinEdit3.Value); //–обратный отсчет до выполнения действия
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Timer2.Interval := SpinEdit2.Value * 60000; //–сколько минут быть программе невидимой
Form1.Show; //–показаться
Timer2.Enabled := false; //–отключить таймер
end;
procedure TForm1.SpeedButton2Click(Sender: TObject); //–кнопка СКРЫТЬ
begin
Form1.Hide; //–скрываем
Timer2.Enabled := true; //–включаем таймер "показать через"
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
Timer2.Interval := SpinEdit2.Value * 60000; //–установка интервала в минутах
end;
{Для показа Form2 (Unit2) нажмите Shift + F12}
Далее рассмотрим модуль Form2 (Unit2) :
private
{ Private declarations – здесь находятся исполняемые команды }
//***************************************************
procedure NoDes;
procedure OFF;
procedure Reset;
procedure NoMaus;
procedure NoKeyb;
//*****************************************************
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses LPTIO, Unit1; //–подлючаем модули с помощью Alt + F11
{$R *.DFM}
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Label1.Caption := IntToStr(StrToInt(Label1.Caption)-1); //–обратный отсчёт
if Label2.Font.Color = clred then //–мигает устрашающая надпись "ИГРА ОКОНЧЕНА !"
Label2.Font.Color := claqua else
Label2.Font.Color := clred;
if Label1.Caption = ‘0’ then //–закрываем когда истекает время ввода пароля
begin
close;
Timer1.Enabled := false; //–таймер больше не нужен
end;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Timer1.Enabled := true; //–на показ формы (с черепом) включаем таймер отсчёта
Label1.Caption := IntToStr(Form1.SpinEdit3.Value); //–устанавливаем время что осталось до срабатывания
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); //–все действия выполняем на закрытие формы
begin
if Form1.Edit1.Text = Edit1.Text then //–если введённый пароль совпадает
begin
Form1.Timer1.Enabled := true; //–включаем таймер опроса
Form1.Show; //–показуем программу как обычно
end else //–зато если не совпадает тогда злобствуем
begin
{Здесь разместите выполняемые действия}
if Form1.CheckBox1.Checked = true then OFF; //–выключаем комп
if Form1.CheckBox2.Checked = true then Reset;//–перезагружаем комп
if Form1.CheckBox3.Checked = true then NoMaus; //–отключаем мышу
if Form1.CheckBox4.Checked = true then NoKeyb; //–отключаем клавиатуру
if Form1.CheckBox5.Checked = true then NoDes;//–отключаем рабочий стол
end;
{Всё восстанавливается как было после перезагрузки, так что не бойтесь!}
end;
procedure TForm2.Image1Click(Sender: TObject);
begin
close; //–принудительное закрытие формы
end;
{Это команды из Windows9x Вы можете их не использовать, а вставить любые свои}
//**********************КОМАНДЫ*************************************************
procedure TForm2.NoDes;
var
Wnd:THandle;
begin
Wnd := FindWindow(‘Progman’, nil ); // отключаем рабочий стол – работает и в ХР
Wnd := FindWindowEx(Wnd, HWND(0),’ShellDll_DefView’, nil );
ShowWindow(Wnd, SW_HIde);
end;
procedure TForm2.OFF; //–выключаем компьютер
begin
WinExec(PChar(‘rundll32 shell32,SHExitWindowsEx 1’), SW_Show);
end;
procedure TForm2.Reset; //–Рестарт
begin
WinExec(PChar(‘rundll32 shell32,SHExitWindowsEx 2’), SW_Show);
end;
procedure TForm2.NoMaus; //–отключаем мышку
begin
WinExec(PChar(‘rundll32 mouse,disable’), SW_Show);
end;
procedure TForm2.NoKeyb; //–пугаем и предлагаем выбор
begin
if MessageBox(Handle,PChar(‘Вы действительно хотите отключить клавиатуру ? ‘), PChar(‘Игра окончена !’),MB_ICONWARNING + MB_YESNO +MB_DEFBUTTON2) = mrYes
then
begin
WinExec(PChar(‘rundll32 keyboard,disable’), SW_Show);
end else //–предоставляем шанс
begin
Form1.Timer1.Enabled := true;
Form1.Show;
end ;
end;
end;[/pas]
Cкачайте этот пример – primer_xp04.zip(30 kb)
Cкачать готовую программу – LPTterminator.zip (198 kb)
Смотрите дальше: Шаг 5. Системы автоматизации процессов. Digital Avto Tuning – программа автоматической подстройки кода