03.04.2014 Views

Май - Xakep Online

Май - Xakep Online

Май - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

coding<br />

Полезная информация<br />

Объяви в секции public формы процедуру<br />

GET_SCREEN. Ее реализация представлена<br />

ниже:<br />

procedure TForm1.GET_SCREEN;<br />

var<br />

Desktop: TCanvas;<br />

B: TBitmap;<br />

W, H :Integer;<br />

PNG: TPNGObject;<br />

Kursor:TPoint;<br />

TempRect:TRect;<br />

begin<br />

GetCursorPos(Kursor);<br />

W:=Screen.Width;<br />

H:=screen.Height;<br />

TempRect:=Rect(Kursor.x,Kursor.<br />

y,Kursor.x+10,Kursor.y+10);<br />

B:=TBitmap.Create;<br />

B.Width:=W;<br />

B.Height:=H;<br />

Desktop:=TCanvas.Create;<br />

try<br />

with Desktop do<br />

Handle := GetWindowDC(GetDeskto<br />

pWindow);<br />

with B.Canvas do<br />

begin<br />

Brush.Color:=clGreen;<br />

CopyRect(Rect (0, 0, w, h),<br />

DeskTop,<br />

Rect(0, 0, w, h));<br />

FillRect(TempRect);<br />

end;<br />

PNG := TPNGObject.Create;<br />

PNG.Assign(B);<br />

PNG.SaveToFile(ExtractFilePat<br />

h(Application.ExeName)+'\'+'s.<br />

png');<br />

finally<br />

DeskTop.Free;<br />

B.Free;<br />

PNG.Free;<br />

end;<br />

end;<br />

С помощью этой процедуры мы получим скриншот<br />

экрана, вместо курсора сделаем зеленый<br />

прямоугольник, для чего используем функции<br />

GetCursorPos, Rect и FillRect. Полученный<br />

графический образ мы сохраняем в файле s.png<br />

(комментарии к коду ты найдешь в исходниках<br />

программы).<br />

Итак, мы подошли к заключительному этапу создания<br />

сервера. Сделай обработчик OnExecute<br />

компонента TIdTCPServer, в котором будет<br />

происходить анализ присланных команд от<br />

клиента (на основании их будут совершаться<br />

необходимые нам действия).<br />

procedure TForm1.IdTCPServer1Exe<br />

cute(AThread: TIdPeerThread);<br />

var<br />

z: string;<br />

fstream:TFileStream;<br />

X,Y:integer;<br />

K:TPoint;<br />

begin<br />

with AThread.Connection do<br />

begin<br />

//Читаем, что прислало нам клиентское<br />

приложение<br />

z := ReadLn;<br />

if SameText(Copy(z, 1, 11),<br />

'get_screen') then<br />

begin<br />

Log('Запрошен скриншот');<br />

GET_SCREEN;<br />

fStream := TFileStream.Create<br />

(ExtractFilePath(Application.<br />

ExeName)+'\'+'s.png',<br />

Indy представляет собой набор классов<br />

Object Pascal для работы с сетью<br />

(в частности, с интернетом). Так, класс<br />

TIdTCPConnection предоставляет базовые<br />

функции для низкоуровневой работы с<br />

сетевыми сервисами. Одним из главных<br />

достоинств Indy является встроенный механизм<br />

многопоточности (multi-threading).<br />

Стоит отметить, что компоненты Indy входят<br />

в комплект поставки Delphi и очень просты<br />

в использовании. Например, ты можешь<br />

запросто создать FTP-сервер или почтовый<br />

клиент, при этом написав минимум кода и<br />

не вникая в технологию реализации сетевых<br />

протоколов.<br />

fmOpenRead +<br />

fmShareDenyNone);<br />

//ПЕРЕДАЕМ файл клиентскому<br />

приложению<br />

OpenWriteBuffer;<br />

Log('Передаем файл s.png');<br />

WriteStream(fStream);<br />

Log('Файл передан');<br />

CloseWriteBuffer;<br />

FreeAndNil(fStream);<br />

end;<br />

...<br />

//Обработка остальных команд<br />

...<br />

AThread.Connection.Disconnect;<br />

end;<br />

end;<br />

Здесь приведен лишь фрагмент кода обработчика<br />

OnExecute, который отправляет скриншот<br />

экрана. Остальную часть ты найдешь в исходниках<br />

программы, расположенной на диске.<br />

Поговорим более детально о командах, которые<br />

может принимать наш сервер; с первой<br />

мы уже знакомы, это «get_screen». Остальные<br />

представлены на схеме, изображенной на<br />

«Зачем писать свой radmin? Не поверишь, но<br />

многие антивирусы теперь предупреждают<br />

пользователя не только о запуске (!), но даже<br />

о наличии оригинального radmin’а на жестком<br />

диске, не без оснований считая его программой<br />

как минимум подозрительной»<br />

xàêåð 05 /101/ 07<br />

/<br />

121

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!