Ãœðù - Xakep Online
Ãœðù - Xakep Online
Ãœðù - Xakep Online
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