нагибаем 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; //Объявляем процедуры нашего небольшого тестового проекта. |