Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #63, ФЕВРАЛЬ 2006 г.

нагибаем AOL/MSN

ВОЛЬФ ДАНИЯР AKA PAYHASH

Спецвыпуск: Хакер, номер #063, стр. 063-108-4


Для начала качаем icqkid.dll (ROOT-версию) с www.icqkid.com, запускаем Delphi. Я использовал четвертую версию Delphi только из-за моих традиционно-классических взглядов :). Проект будет донельзя простым (почти как классический Hello World!), так как задача заключается в объяснении методики и принципа работы RCIOIS, а не в создании учебника по Delphi (к тому же мои познания Delphi — на уровне работы алгоритма языка). Даже в вузе преподаватель всегда разбирает примеры «на троечку» и тем самым предоставлял студенту возможность самостоятельно решать примеры на четыре и пять ;). Так и я. Получай только скелет материала, остальное додумывай самостоятельно. Итак, начнем с разбора того, какие функции может предоставить DLL. В первой версии ICQKID всего четыре функции: icq_activate_connect, icq_add_status, icq_msg_get, icq_msg_put.

Функция icq_activate_connect устанавливает соединение с ICQ-сервером, полный синтаксис такой:

icq_activate_connect(const char *uin, const char *password, const char *loginserver, WORD icqport);

Параметры функции uin, password, loginserver принимают строковые значения, содержащие ICQ-номер, пароль и сервер ICQ, к которому нужно подключиться.

Последний, четвертый параметр функции принимает двубайтовое значение — это порт к подключаемому сервису ICQ.

Функция icq_add_status принимает всего один строковый параметр — статус в ICQ-сети. Статусов примерно десять штук, но в icqkid.dll в первых версиях определенны всего три статуса. Посмотрим в исходный текст библиотеки icqkid.c и найдем функцию

void __declspec(dllexport) WINAPI icq_add_status(const char *status)

{

WORD f4chat=0x0020;

WORD online=0x0000;

WORD invisible=0x0100;

/*

Here some another code.

*/

}

Видно, что в этой функции определено всего три статуса: free for chat, online, invisible. Если ты хочешь пополнить список статусов, пополняй по аналогии, как сделано в функции, однако понадобится найти спецификацию по протоколу ICQ.

Функции icq_msg_get и icq_msg_put — для получения и отправки простого текстового сообщения соответственно. Полный синтаксис функций такой:

для icq_msg_get это icq_msg_get(char *ruin, char *msg);

первый аргумент функции возвращает ICQ-номер владельца текстового сообщения, второй аргумент функции возвращает само текстовое сообщение.

Функция icq_msg_put имеет следующий полный синтаксис:

icq_msg_put(char *duin, char *sendmsg, int putmsglen);

первые два аргумента функции получают строковые значения — это ICQ-номер получателя текстового сообщения и само текстовое сообщение, третий аргумент получает числовое значение, а именно длину отправляемого сообщения.

Сейчас сосредоточься на нашем Delphi-проекте.

Создаем форму и раскидываем на ней компоненты Delphi, как это показано на рисунке.

листинг №1: исходный код на Delphi (с использованием icqkid.dll)

unit Unit1;

interface

uses

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

StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Memo1: TMemo;

Timer1: TTimer;

//Объявляем процедуры нашего небольшого тестового проекта.

Назад на стр. 063-108-3  Содержание  Вперед на стр. 063-108-5