ChatX+Bot - бот под Windows 9x/NT (содержащий в себе также простенький чат-клиент и особенно приспособленный для работы на IRCX-серверах вроде mschat.msn.com:6667; фактически, - многокомнатная (и многосерверная!) версия DoorBot'а) Бот реализован на Delphi. CHATX (c) 2000, http://vphil.da.ru В ChatX+Bot реализовано: ======================== - ChatX+Bot - одновременно и чат-клиент, и бот; - полная поддержка IRCX (русские ники, точка у овнеров, пароли на овнера и др.); - продвинутая защита от флуда; - комнаты-"двери" - особый прием, благодаря которому Ваша комната всегда будет видна в списке МС-чата; - стратегия нескольких ботов: из одной программы можно ввести на каналы 2-3 бота, которые будут помогать друг другу; - бот никогда не мешает пользователям и не предпринимает карательных действий, но терпеливо ждет и, по возможности, оказывается овнером; будучи овнером, бот следит за тем, чтобы правильно были выставлены ключи на овнера и хоста и, при необходимости, выставляет нужные, не позволяя, однако, пользователям подглядеть ключи; - режим бота с транслитерацией русских текстов для пользователей без русских шрифтов (команды бота !translit on/!translit off); разрешение русских ников (!nick <ник>); возможность оставить сообщение на боте (!leave <сообщение>); просмотр, информации о том, когда пользователь покинул канал и какое сообщение оставил (!seen <пользователь>); - чат-клиент "помнит" последние установленные кем-либо ключи (на хоста, на овнера), IP людей в комнатах (целиком - даже если у Вас отобрали оп) - заход в чат через несколько проксей по схеме: чат-клиент -> прокси 1 -> прокси 2 : -> чат-сервер; автоопределение типа прокси; - список ботов, список комнат, список пользователей, разделение прав доступа пользователей к боту; - в отладочном окне "вживую" видно, какими сообщениями обмениваются чат-клиент и чат-сервер; это удобно при изучении протокола IRC (и его расширений - IRCX); - поддержка сервера MSN 207.46.216.29:6667 (см. http://chat.msn.com) - утилита ChatXShow - визуализирует бота на экране, когда тот запущен в режиме скрытия - возможность подключения внешних текстовых файлов справок (подробнее см. в соответствующием разделе) Пока нету: - контроля бота по DCC или Telnet, передачи файлов через чат; - отображения сообщений в цвете; - макросов; - всяческих удобств интерфейса. Команды бота: ============= * Угловые скобки <> просто обрамляют название параметра, при обращении к боту их указывать не следует * Квадратные свобки [] означают, что параметр необязательный * Фигурные скобки показывают, что есть выбор между вариантами параметра; * Пример: !USERLIST [{<ИМЯ>|<МАСКА>}] означает, что можно: - использовать команду без параметров: !USERLIST - указать имя пользователя: !USERLIST Misha - указать маску пользователя: !USERLIST *!*misha@123.45.67.* 1. Команды, доступные для незарегистрированных на боте пользователей (пользователей с уровнем 0) !REGISTER <ПАРОЛЬ> [<МАСКА> [<ИМЯ_ПОЛЬЗОВАТЕЛЯ>]] Регистрация пользователя; по умолчанию берется ваш текущий ник и маска вида *!*idnet@ip3.*; пример: !register superpass *!*me*@123.45.67.* newbie !SEEN <ИМЯ_ПОЛЬЗОВАТЕЛЯ> Получение информации о том, бот последний раз видел указанного зарегистрированного пользователя; каждый зарегистрированный пользователь характеризуется своим уникальным регистрационным именем (заданным в команде !register и не обязательно совпадающим с текущим ником пользователя; данное имя можно уточнить с помощью в списке пользователей с помощью команды !userlist); !seen также возвращает последнее сообщение, оставленное пользователем (командой !leavemsg) !TOPIC [<КОМНАТА>] Узнать, кто и когда задал тему комнаты !USERLIST [{<ИМЯ>|<МАСКА>}] Вывод списка зарегистрированных пользователей !USERINFO <ИМЯ_ПОЛЬЗОВАТЕЛЯ> Вывод сведений о зарегистрированном пользователе !ROOMLIST [<ИМЯ_БОТА>] Список комнат, прописанных в ботах (или указанном боте) !BOTLIST Список ботов (то есть подключений) !HELP [<КОМАНДА>|<@>|<УРОВЕНЬ>|<*> [<КОЛИЧЕСТВО_ВЫВОДИМЫХ_СТРОК>]] Справка на английском языке (!help без параметров выведет краткую справку команд; !help @ - доступные Вашему уровню команды, !help NNN - доутспные уровню NNN; !help * - выведет все команды) !HELP-RUS [<КОМАНДА>|<*> [<КОЛИЧЕСТВО_ВЫВОДИМЫХ_СТРОК>]] Справка на русском языке (!help-rus без параметров выведет краткую справку команд; !help-rus @ - доступные Вашему уровню команды, !help-rus NNN - доутспные уровню NNN; !help-rus * - выведет все команды) !TRANSLIT ON Включение дублирования латиницей всех русских фраз, произносимых в комнате; данную команду следует произносить не в приват боту, а в комнате, в которой следует включить транслит !TRANSLIT OFF Отключение дублирования латиницей всех русских фраз, произносимых в комнате; данную команду следует произносить не в приват боту, а в комнате, в которой следует выключить транслит !NICK Перевод русских закодированных IRCX-ников (вроде таких: 'РўРчС?С', ^D0A2D0B5D181D182) 2. Команды для зарегистрированных пользователей (с уровнем 1) Для идентификации пользователя бот использует либо маску пользователя, либо его идентификационное имя и пароль. Если пользователь не соответствует своей маске (например, изменился IP-адрес), то для доступа к командам, приводимым ниже, он должен указать свое идентификационное имя и пароль перед командой в следующем формате: !![<ИМЯ_ПОЛЬЗОВАТЕЛЯ>:]<ПАРОЛЬ>!<КОМАНДА> (если имя пользователя опущено, то берется Ваш текущий ник) Пример: !!newbie:superpass!leavemsg Вернусь в 9 часов !SETINFO <СТРОКА> Задание сведений о себе или приветствия, которым бот будет "встречать" Ваше появление в чате; также эти сведения можно просмотреть командой !userinfo !LEAVEMSG <СООБЩЕНИЕ> Оставить сообщение на боте (его сможет просмотреть любой командой !seen) !PASS <НОВЫЙ_ПАРОЛЬ> Смена пароля на боте, в префиксе команды обязательно следует указать ваше регистрационное имя и текущий пароль, например: !!newbie:superpass!pass abigsecret !ADDMASK <МАСКА> [<ИМЯ_ПОЛЬЗОВАТЕЛЯ>] Добавление маски; если Ваш уровень доступа на боте выше или равен 400, то в префиксе команды обязательно следует задать пароль; добавить маску другому пользователю Вы сможете только в случае, если Ваш уровень доступа на боте не меньше 400, а уровень доступа того пользователя не превосходит Ваш !DELMASK <МАСКА> [<ИМЯ_ПОЛЬЗОВАТЕЛЯ>] Удаление маски; если Ваш уровень доступа на боте выше или равен 400, то в префиксе команды обязательно следует задать пароль; добавить маску другому пользователю Вы сможете только в случае, если Ваш уровень доступа на боте не меньше 400, а уровень доступа того пользователя не превосходит Ваш 3. Команды для пользователей, имеющих "голос" (уровень 50). !VOICE <КОМНАТА> [<НИК>] Дать "голос" (+v) себе или указанному нику 4. Команды для хозяев (овоп) комнаты (уровень 100). !OP <КОМНАТА> [<НИК>] Сделать хостом (опом) себя или указаного пользователя !AUTOOP {ON|OFF} [<ИМЯ_ПОЛЬЗОВАТЕЛЯ>] Включить (on) или выключить (off) режим, когда бот автоматически дает оп при входе вам или указанному пользователю; уточнить значение данного параметра у пользователя можно командой !seen 5. Команды для владельцев ("овнеров") комнаты (уровень 400). Все приводимые ниже команды требуют обязательного указания идентификационного имени пароля и в префиксе команды (!!пользователь:пароль! команда) !OWNER <КОМНАТА> [<НИК>] Сделать себя или указанного ника овнером (владельцем) канала (икоманда поддерживается только на IRCX-серверов!) !LEVEL <ИМЯ_ПОЛЬЗОВАТЕЛЯ> <НОВЫЙ_УРОВЕНЬ> [<КОМНАТА> [<ИМЯ_БОТА>]] Изменение уровня доступа пользователя. Вы не можете бать пользователю уровнь больше, чем ваш собственный. Возможно задание не только глобального уровня, но уровня пользователя в отдельной комнате отдельного бота - тогда пользователь сможет управлять в своей комнате, но не будет иметь доступа в другим !SAVE Немедленное сохранение текущих настроек бота в файл (в норме бот сохраняет настройки в файл раз в несколько минут) 6. Команды для мастеров (уровень 500) !CLEAR Очистка внутреннего кэша бота. Используйте данную команду, если кэш бота "зафлудили" своими запросами другие пользователи, а Вам не хочется ждать, пока кэш очистится. !IRC <КОМАНДА_IRC> Выполнение любой IRC-команды текущим ботом (перед именем команды слэш ставить не следует!) !BOTIRC <ИМЯ_БОТА> <КОМАНДА_IRC> Выполнение любой IRC-команды указанным ботом (перед именем команды слэш ставить не следует!) !ADDROOM <КОМНАТА> [<ИМЯ_БОТА>] Добавление комнаты в список комнат текущего или указанного бота !DELROOM <КОМНАТА> [<ИМЯ_БОТА>] Удаление комнаты из списка комнат текущего или указанного бота !DELUSER <ИМЯ_ПОЛЬЗОВАТЕЛЯ> Удаление записи о пользователе !SET <КОМНАТА> <ПАРАМЕТР> <ЗНАЧЕНИЕ> Задание параметра настройки текущего бота для конкретной комнаты (например, темы комнаты, которую при входе будет выставлять бот, ключа овнера и т.д.) !APPEND <КОМНАТА> <ПАРАМЕТР> <ЗНАЧЕНИЕ> Дополнение параметра настройки текущего бота для конкретной комнаты !GET <КОМНАТА> <ПАРАМЕТР> Получение параметра настройки текущего бота для конкретной комнаты (например, темы комнаты, которую при входе будет выставлять бот, ключа овнера и т.д.) !BOTSET <ИМЯ_БОТА> <КОМНАТА> <ПАРАМЕТР> <ЗНАЧЕНИЕ> Задание параметра настройки заданного бота для конкретной комнаты (например, темы комнаты, которую при входе будет выставлять бот, ключа овнера и т.д.) !BOTAPPEND <ИМЯ_БОТА> <КОМНАТА> <ПАРАМЕТР> <ЗНАЧЕНИЕ> Дополнение параметра настройки заданного бота для конкретной комнаты !BOTGET <ИМЯ_БОТА> <КОМНАТА> <ПАРАМЕТР> Получение параметра настройки заданного бота для конкретной комнаты (например, темы комнаты, которую при входе будет выставлять бот, ключа овнера и т.д.) !REN <КОМНАТА> <НОВОЕ_ИМЯ_КОМНАТЫ> Переименование комнаты (внимание: переименование происходит одновременно на всех ботах) Список основных параметров для команд ! set, !get, !botset, !botget: OWNERKEY, HOSTKEY, MODES (значение по умолчанию: +tnl 99), TOPIC, PRIORITY, SILENT (1 - никода не говорить в комнату; 0 - отвечать на запросы из комнаты); USE_DOORS (1 - поддержка дверей включена (по умолчанию; 0 - выключена), DOOR_MAX_COUNT (максимальное количество дверей на одну комнату; по умолч. 3); DOOR_TIME (время пересоздания дверей в секундах; по умолчанию 700) DOOR_MODES (по умолчанию +tnl 99), DOOR_TOPIC (тема для дверей; оставьте параметр пустым, чтобы использовалась тема главной комнаты) 7. Команды для владельца бота (уровень 777). !RESTART [<ИМЯ_БОТА>|*] Перезапуск бота (* - всех) !SETGLOBALPARAM <ПАРАМЕТР> <ЗНАЧЕНИЕ> Задать глобальный параметр (общий для всех подключений и всех комнат) !APPENDGLOBALPARAM <ПАРАМЕТР> <ЗНАЧЕНИЕ> Дополнить глобальный параметр (общий для всех подключений и всех комнат) !GETGLOBALPARAM <ПАРАМЕТР> Получить значение глобального параметра (общего для всех подключений и всех комнат) Список глдобальных параметров: SAVE_SEC, DOOR_COMING_TEXT, DOOR_INVITE_TEXT, HELP_STR, HELP_STR_RUS !SETBOTPARAM <ИМЯ_БОТА> <ПАРАМЕТР> <ЗНАЧЕНИЕ> Задать параметр бота (=соединения) !APPENDBOTPARAM <ИМЯ_БОТА> <ПАРАМЕТР> <ЗНАЧЕНИЕ> Дополнить параметр бота !GETBOTPARAM <ИМЯ_БОТА> <ПАРАМЕТР> Получить параметр бота Список основных параметров бота: HOSTS, PROXY, GROUP, PASSWORD, NICK_MODES, NICK_NAME, USER_NAME, HOST_NAME, REAL_NAME; PROXY_TIME_OUT, CACHE_ENABLED, MAX_CACHE_SIZE, CACHE_WAIT, COMBINE_WAIT_SUMMARIZE, PERIOD, MAX_PERIOD_TRAFFIC, MAX_PERIOD_MSG_COUNT; MAX_ROOM_COUNT (по умолчанию: 10); ALLOW_TRANSLIT, DECODE_NICKS, DOOR_COMING (0 или 1); RECONNECT_WAIT (по умолчанию: 0); AUTO_PERFORM (PING %server), AUTO_PERFORM_WAIT (300000 мс); FULL_SILENT (0 или 1), QUICK_JOIN (0 или 1); MSN_WAIT_AUTH (0 или 1), MSN_CREATE Горячие клавиши: ================ F1 - данная справка F2 - переход в окно ввода F3 - переход в список комнат F5 - переход в список ников F7 - ввод специального символа F9 - подключиться к серверу F10 - отключиться от сервера Горячие клавиши для окна ввода: Ctrl+Enter - перевод строки в окне ввода Ctrl+Up, Ctrl+Down - навигация по истории сообщений Alt+Up, Alt+Down - навигация по списку комнат Alt+Left, Alt+Right - навигация по списку ников Основные команды ChatX (как чат-клиента): ========================================= /CONNECT - соединиться с текущим чат-сервером /DISCONNECT - отсединиться от текущего чат-сервера /J <комната> или /JOIN <комната> - войти в комнату /PART - выйти из текущей комнаты /CLOSE - закрыть текущее окно /SAY <сообщение> - произнести сообщение /PRIVSAY <сообщение> - произнести сообщение в приват текущему нику /SAYTO <ник> <сообщение> - произнести сообщение указанному нику /A <сообщение> или /ACT <сообщение> - выполнить действие /PRIVACT <сообщение> - выполнить действие в привате текущего ника /ACTTO <ник> <сообщение> - выполнить действие в привате указанного ника /NOTICE <сообщение> - сделать уведомление /PRIVNOTICE <сообщение> - сделать уведомление текущему нику /NOTICETO <ник> <сообщение> - сделать уведомление указанному нику /WHOIS - получение сведений о нике /VOICE - дать текущему нику право разговаривать в модерируемом канале /DEVOICE - лишить текущий ник права разговаривать в модерируемом канале /HELPER - сделать текущий ник помощником /DEHELPER - лишить текущий ник статуса помощника /O или /OP - сделать текущий ник хозяином /D или /DEOP - лишить текущий ник статуса хозяина /OWNER - сделать текущий ник владельцем канала /DEOWNER - лишить текущий ник статуса владельца канала /KICK [<причина>] - выгнать текущий ник из канала /TOPIC <тема> - задать тему канала /MODE <режим> - задать режимы канала /BAN <макса> - запретить вход ников, соответствующих заданной маске /UNBAN <маска> - разрешить вход ников, соответствующих заданной маске /I <ник> или /INVITE <ник> - пригласить ник в текущий канал /QUIT [<причина>] - покинуть чат-сервер /ACCESS <доступ> - установить уровни доступа /PROP <свойство> - задать свойство канала /IRC - выполнить IRC-команду /IRCTO <номер_соединения> <команда> - то же на указанном соединении /COPY - скопировать текущий ник в буфер обмена /DETECT - определение IP текущего ника /GONEWROOM - делать активной новую комнату /NOGONEWROOM - оставаться в прежней комнате при появлении новой Основные параметры бота. ======================== 1. Замечания: - в скобках дается значение по умолчанию; - список соединений определяется по непустому значению параметра HOSTS; чтобы с удаленного компьютера создать новое соединение бота с чат-сервером следует сначала задать все параметры соединения (NICK_NAME, USER_NAME, PROXY, GROUP, CACHE_USAGE и т.д.), а только потом - параметр HOSTS; очистка HOSTS убет соединение, но не очистит его параметры (NICK_NAME, USER_NAME и т.д.) - список комнат определяется по непустому значению параметра комнаты STATUS, поэтому чтобы временно вывести бота из комнаты следует очистить параметр STATUS; для возвращения бота в комнату задайте ее STATUS равным MAIN (для комнат-дверей этот параметр имеет значение DOOR) 2. Глобальные параметры (задаются командой !SETGLOBALPARAM) SAVE_SEC (1500) Число; время автосохранения конфигурации на диск, в сек. DOOR_DIV (_) Разделитель имени и постфикса комнаты для комнат-дверей DOOR_POSTFIXES ([WELCOME] [ENTRY] [DOOR] [COMEIN] [THISWAY]) Варианты постфикса для комнат-дверей DOOR_COMING_TEXT (%nick is coming (%room)) Текст, который выдается в главную комнату при входе пользователя в комнату-дверь (текст выдается при параметре соединения DOOR_COMING равном 1) DOOR_INVITE_TEXT (/Join %room - Заходи в %room) Текст приглашения пользователя в главную комнату HELP_STR Добавка к английской справке (выдается после заголовка справки) HELP_STR_RUS Добавка к русской справке (выдается после заголовка справки) AUTO (1) 1 или 0; 1 означает автоматический режим - бот сам выходит из комнат, в которых не прописан 2. Параметры соединения (задаются командой !SETBOTPARAM) HOSTS Сервер или список серверов, разделденных точкой с запятой (;) PROXY Прокси или список прокси-серверов, разделденных точкой с запятой (;) GROUP Боты (соединения) у которых совпадает данный параметр, действую сообща (опают друг друга и т.д.) PASSWORD Пароль для сервера NICK_NAME Имя бота USER_NAME Иентификация бота HOST_NAME и SERVER_NAME 2-й и 3-й параметры команды USER (можно не заполнять - бот заполнит их сам) REAL_NAME Реальное имя бота RECONNECT_WAIT (0) Время до повторной попытки соединения после обрыва связи, мс. PROXY_TIME_OUT (30000) Тайм-аут прокси, мс. COMBINE_MSG_ENABLED (1) 1 или 0; 1 - объеинять сообщения при посылке на сервер (ускоряет работу бота) MAX_MSG_SIZE (250) Максимальная длина сообщения CACHE_WAIT (4500) Время ожидания между посылкой сообщений (для защиты от флуда), мс. MAX_ROOM_COUNT (10) Максимально допустимое сервером количество комнат для одного соединения ALLOW_TRANSLIT (1) 1 или 0; 1 - разрешать режим транслита DECODE_NICKS (1) 1 или 0; 1 - разрешать декодирование русских ников DOOR_COMING (0) 1 или 0; 1 - выводить уведомление в главную комнату о входе пользователя в комнату-дверь AUTO_PERFORM (PING %server) IRC-команда, которая будет автовыполняться каждые AUTO_PERFORM_WAIT мс; в качестве разделителя команд используйте следующую комбинацию символов: ^0D^0A AUTO_PERFORM_WAIT (300000) Время, через которое выполненяется IRC-команда из AUTO_PERFORM FULL_SILENT (0) Отключить сообщения бота в комнату QUICK_JOIN (1) 1 или 0; 1 - режим быстрого захода в комнату MSN_WAIT_AUTH (0) 1 или 0; 1 - разрешать аутентификацию на сервере MSN (предварительно Вам следует зайти на сайт этого сервера http://chat.msn.com и войти в любую комнату; текущий адрес сервера MSN: 207.46.216.29:6667 MSN_CREATE Команда для входа в сервер MSN и создания комнаты; формат команды: Категория %#имя_комнаты %топик флаги язык ключ пример: Computing %#Test_Room %Testing - EN-US superkey существующие категории: Peers, Romance, Lifestyles, General, Teen, City\bChats, Entertainment, Interests, Sports\b&\bRecreation, Computing, Religion, News, Worldwide, Unlisted; \b = пробел в категории или имени комнаты флаги: - (по умолчанию), h (скрытая комната), s (скрытая) и т.д. 3. Параметры комнаты (задаются командами !BOTSET или !SET) STATUS Статус комнаты (MAIN - основная, DOOR - дверь); в большинстве случаев не следует устанавливать этот параметр PRIORITY (100) Число, приоритет, в котором бот входит в комнаты (быстрее всего входит в комнаты с наименьшим значением в свойстве PRIORITY) OWNERKEY Овнеркей комнаты HOSTKEY Хосткей комнаты MODES (+tnl 99) Режимы комнаты TOPIC Тема комнаты SILENT (0) 1 или 0; 1 - отключить вывод сообщений в комнату USE_DOORS (1) 1 или 0; 1 - открывать комнаты-"двери" и приглашать всех входящих в ник в главную комнату DOOR_MAX_COUNT (3) Максимальное количество дверей DOOR_TIME (700) Время пересоздания комнат-дверей DOOR_MODES (+tnl 99) Режимы комнаты-двери DOOR_TOPIC Тема комнаты-двери REJOIN_WHEN_OWNER_EXISTS (1) 1 или 0; 1 - перезаходить в комнату, если в ней есть овнер или хост SEPARATE_USER_LIST (0) 1 или 0; 1 - в комнате действуют уровни только тех пользователей, котрые прописаны конкретно в ней, а глобальные опы/овнеры и т.д. не действуют RENAME_ROOM_BASE () Имя базовой комнаты; если данный параметр задан, то в случае тейковера базовой комнаты она будет переименована в комнату с началом имени как у базовой комнаты и случайным окончанием; при тейковере этой комнаты бот опять поменяет ее имя REJOIN_WHEN_NO_OP (0) 1 или 0; 1 - перезаходить, если в комнате вообще нет опов/овнеров; рекомендуется включать этот режим, когда параметр RENAME_ROOM_BASE имеет непустое значение DECODE_NICKS (1) 1 или 0; 1 - декодировать русские ники в комнате 4. Глобальные параметры пользователя. LEVEL Уровень пользователя (1 - зарегистрированный, 50 - воис, 100 - оп, 400 - овнер, 500 - мастер, 777 - владелец бота), задается командой !LEVEL INFO Инфромация о пользователе, задается командой !INFO HOSTS Маски пользователя, задаются командами !ADDHOST, !DELHOST PASSWORD Пароль плоьзователя, задается при регистрации командой !REGISTER, меняется команджой !PASS AUTOOP Режим автополучения опа, задается командой !AUTOOP LEFT_MSG Сообщение, оставленное пользователем, задается командой !LEAVEMSG, читается при выводе !USERINFO Подключение внешних файлов справок ================================== Бот зачитывает статьи из файлов справки в ответ на запросы пользователей Имя файла должно начинаться с восклицательного знака. Файл должен иметь расширение TXT и лежать в каталоге запуска ChatX. Формат файла: !команда1 описание описание ... !команда2 описание описание описание ... Начало всех команд должно совпадать с именем файла. Пример из справочной системы по Visual Basic: Имя файла: !VB.TXT Содержание файла: !VB_HELP * Добро пожаловать в справочную систему. Оглавление: 1.Типы данных.(Введи: !VB_DATA) 2.Операции ,функции и операторы.(Введи: !VBOP_X где Х номер раздела.Всего20 разделов.) 3.Поиск(Введи: !VBS_X где Х слово для поиска.Пример: !VBS_END или !VBS_ERASE) 4.API функции. (!VB_API) 5.About.(Введи: !VBA) * [...] -------------------------------------------- !VB_API * Всвязи с большими размерами примеров даю ссылки на сайты: http://vbrussian.com/ http://vbrussian.com/areavb/ http://kda.agava.ru/ http://www.cm.f2s.com/ http://vbstep.newmail.ru/ http://artsoft.agava.ru/ http://www.visual.2000.ru/develop/vb/ http://www.visual.2000.ru/develop/vb/internet/web-best.htm Поищите , можно много чего интересного найти. * -------------------------------------------- !VBA * About. Материалы взяты из книги:" Visual Basic 3.0 Viaual Basic 4.0 Х.Р.Арушанов", все API функции можно найти в ИНТЕРНЕТЕ.(не из книги) Мучался :) печатал :"Slavik" aka "Podjigatel" Моё мыло : chat001@chat.ru Все дополнения ,исправления и тд. слать на мыло. * --------------------------------------------