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 />

Несколько слов о формате PNG<br />

В 1978 году израильские исследователи<br />

Яков Зив (Jacob Ziv) и Абрам<br />

Лемпел (Abraham Lempel) изобрели<br />

новый алгоритм компрессии данных<br />

без потерь, названный LZ78. Публикация<br />

алгоритма была открытой, любой<br />

человек мог взять и использовать его<br />

для своих целей, и в 1987 году сотрудник<br />

компании CompuServe Боб Берри<br />

(Bob Berry) разработал на основе LZW<br />

новый формат хранения изображений<br />

— Graphic Interchange Format (GIF). В<br />

декабре 1994 года было объявлено, что<br />

за использование алгоритма LZ78 нужно<br />

выплачивать лицензионные отчисления<br />

разработчикам. Таким образом, использование<br />

формата GIF стало платным.<br />

После этого была создана рабочая<br />

группа под руководством Томаса Боутела<br />

(Thomas Boutell), которая решала задачу<br />

по разработке альтернативы GIF. Новый<br />

формат получил название PNG (Portable<br />

Network Graphics).<br />

Активизация сервера<br />

IdTCPServer1.Bindings.Add;<br />

IdTCPServer1.Bindings.Items[0].<br />

IP:=IPadress.Text;<br />

IdTCPServer1.Bindings.Items[0].Port:=StrToI<br />

nt(PortNumber.Text);<br />

IdTCPServer1.Active:=true;<br />

рисунке. Во время обращения к серверу каждый<br />

клиент создает свой собственный поток.<br />

Информация о нем содержится в переменной<br />

AThread, из которой мы читаем присланную<br />

команду с помощью функции ReadLn. Далее с<br />

помощью функции SameText мы осуществляем<br />

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

разрешенной. Затем создаем поток и через<br />

Сервер удаленного администрирования<br />

в действии<br />

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

соединение, так как запрошенное действие<br />

выполнено.<br />

Проектируем и пишем клиентскую часть<br />

Я уже чувствую нетерпение, с которым ты<br />

хочешь приступить к тестированию разработанной<br />

тобой утилиты. Конечно, хочется<br />

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

(копирайт на эту фразу по-прежнему находится<br />

у инсталлятора Windows 98) и, никуда не бегая,<br />

решать (или создавать) все проблемы пользователей<br />

удаленно. Вот и отлично! Нам остался<br />

последний рывок — разработка клиентской<br />

части.<br />

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

сохранить старое. Размести на форме следующие<br />

компоненты:<br />

• TIdTCPClient (закладка Indy Servers) — с помощью<br />

него ты будешь соединяться с сервером<br />

и посылать ему команды;<br />

• TGroupBox и в нем — два TEdit — в TEdit'ы<br />

ты в дальнейшем введешь IP-адрес сервера<br />

и номер порта, по которому будет происходить<br />

соединение;<br />

• четыре TButton с текстом «Скриншот»,<br />

«Просмотр», «Управление», «Сообщение 'ПОРА<br />

РАБОТАТЬ!'», назови кнопки B_GetScr, B_Watch,<br />

B_Control, B_Message соответственно.<br />

• TCheckBox с текстом «Полноэкранный<br />

режим»;<br />

• два TTimer — один будет использоваться<br />

Внешний вид формы<br />

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

рабочего стола, а второй — для работы в режиме<br />

управления; у обоих компонентов свойство<br />

Enabled установи в False, а свойство Interval<br />

сделай равным 400 — это частота обновления<br />

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

команд, заданная в миллисекундах;<br />

• TImage — в нем будет отображаться картинка с<br />

удаленного рабочего стола.<br />

Приступаем к работе. Для кнопки «Скриншот»<br />

создай следующий обработчик:<br />

procedure TForm1.B_<br />

GetScrClick(Sender: TObject);<br />

var<br />

s:TFileStream;<br />

Bitmap: TBitmap;<br />

PNG: TPNGObject;<br />

begin<br />

//Подключаемся к серверу<br />

connect_to_server;<br />

//Посылаем серверу команду<br />

«get_screen»<br />

IdTCPClient1.WriteLn('get_<br />

screen ');<br />

with IdTCPClient1 do<br />

begin<br />

if FileExists('C:\s.png') then<br />

DeleteFile('C:\s.png');<br />

//Создаем поток<br />

s := TFileStream.Create('C:\<br />

«Принцип работы этой программы может<br />

быть положен в основу сервисовскриншутеров,<br />

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

следить за своими сотрудниками.<br />

Стоимость таких программ достигает<br />

сотен долларов»<br />

/ 122<br />

xàêåð 05 /101/ 07

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

Saved successfully!

Ooh no, something went wrong!