|
Программирование C / C++ / Visual C++ / Delphi / Visual Basic / ASM / Windows / Pascal |
|
Опции темы | Рейтинг: |
28.05.2007, 06:59 | #1 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
TICQClient - исправления, дополнения и прочее
В этой теме будут выкладываться исправления и дополнения к компоненту TICQClient от Кобана для Delphi.
Компонент, актуально работающий на 13.08.2010 скачать: TICQClient Пример работы с компонентом: скачать: СheatICQ Официальный хелп от coban2k скачать: TICQClientHelp.rar ============================== Оригинальный компонент (с демо): скачать Компонент с работающими прокси и кодировками скачать тут Компонент от Romen'a (с демо): - движок на ICQ - к архиве есть все необходимые модули (для WSocket'a от ICS 1.4, плюс из RxLib несколько модулей) - из компонента убрано все "лишнее" скачать Демки делались в Turbo Delphi 2006, поэтому если вы будете собирать их под Delphi 7 и ниже не забудте в насткойках проекта указать пути, иначе среда не найдет эти модули и будет ругаться на их отсутствие. 1) Project -> Options 2) Закладка Directories/Conditionals 3) -> Units output directory: Units -> Search path: ICQClient Последний раз редактировалось DjFly; 04.02.2012 в 20:23. |
01.06.2007, 12:58 | #3 |
Участник
Регистрация: 21.11.2006
Сообщений: 47
ICQ: 232521 Репутация: 13
|
Выложу поиск как в QIP - поиск собеседников и как в ICQ6 ....
в ICQWorks Код:
{Do an extensive search for a user one. ADV} procedure CreateCLI_SEARCHWP_(Pkt: PRawPkt; UIN: LongWord; MinAge, MaxAge: Word; Gender: Byte; Language: Word; City: String; Country: Word; Online: Byte; var Seq, Seq2: Word); var lpkt: TRawPkt; lpkt2: TRawPkt; begin if (Gender <> GEN_MALE) and (Gender <> GEN_FEMALE) then Gender := 0; //Don't care about gender PktInitRaw(@lpkt); //Initialize temporary packet PktInt(@lpkt, $a00F, 2); //CLI_SEARCHBYPERSINF, Channel: 2, SNAC(21,2) 2000/4000 PktInitRaw(@lpkt2); //Initialize temporary packet if City <> '' then begin PktInt(@lpkt2, $00a0, 2); PktNTS(@lpkt2, City); end; //City/State if Country <> 0 then begin PktInt(@lpkt2, $00be, 2); PktInt(@lpkt2, $0004, 2); PktInt(@lpkt2, Country, 4); end; //Country if Language <> 0 then begin PktInt(@lpkt2, $00FA, 2); PktInt(@lpkt2, $0002, 2); PktInt(@lpkt2, Language, 2); end; //Language if Gender <> 0 then begin PktInt(@lpkt2, $0082, 2); PktInt(@lpkt2, $0001, 2); PktInt(@lpkt2, Gender, 1); end; //Gender if (MinAge <> 0) and (MaxAge <> 0) then begin PktInt(@lpkt2, $0154, 2); PktInt(@lpkt2, $0004, 2); PktInt(@lpkt2, MaxAge, 2); PktInt(@lpkt2, MinAge, 2); end; //Age if Online = 1 then begin PktInt(@lpkt2, $0136, 2); PktInt(@lpkt2, $0002, 2); PktInt(@lpkt2, $0001, 2); end; //Search only online users PktLInt(@lpkt, lpkt2.Len + 26, 2); PktInt(@lpkt, $05b90fa0, 4); PktInt(@lpkt, $00000000, 4); PktInt(@lpkt, $00000000, 4); PktInt(@lpkt, $04e30000, 4); PktInt(@lpkt, $00020002, 4); PktInt(@lpkt, Seq2, 2); PktInt(@lpkt, $0001, 2); PktInt(@lpkt, lpkt2.Len, 2); PktAddArrBuf(@lpkt, @lpkt2, lpkt2.Len); CreateCLI_TOICQSRV_(Pkt, UIN, $07D0, @lpkt, lpkt.Len, Seq, Seq2); end; procedure CreateCLI_TOICQSRV_(Pkt: PRawPkt; UIN: LongWord; Command: Word; Data: Pointer; DataLen: LongWord; var Seq, Seq2: Word); var lpkt: TRawPkt; len: Word; begin PktInit(Pkt, 2, Seq); //Channel 2 PktSnac(Pkt, $15, $02, $00000000, 0); //Snac: Type x15/x02, ID x00000000, Flags 0 PktInitRaw(@lpkt); Inc(lpkt.Len, 2); PktInt(@lpkt, Swap32(UIN), 4); PktInt(@lpkt, Swap16(Command), 2); PktInt(@lpkt, Swap16(0), 2); PktAddArrBuf(@lpkt, Data, DataLen); //Store remaining size len := lpkt.Len; lpkt.Len := 0; PktLInt(@lpkt, len - 2, 2); lpkt.Len := len; //-- PktTLV(Pkt, 1, lpkt.Len, @lpkt); PktFinal(Pkt); Inc(Seq2); end; Код:
procedure TICQClient.HSnac1503(Flap: TFlapHdr; Snac: TSnacHdr; Pkt: PRawPkt); ..... $a401, $ae01: //SRV_METAFOUND Channel: 2, SNAC(21,3) 2010/420 or Channel: 2, SNAC(21,3) 2010/430 begin ........ end; $b40f, $aa0f: //SRV_METAFOUND Channel: 2, SNAC(21,3) 2010/420 or Channel: 2, SNAC(21,3) 2010/430 begin if GetInt(Pkt, 1) <> $0a then begin if Assigned(OnUserNotFound) then FOnUserNotFound(Self); Exit; end; Inc(Pkt^.Len, 2); //Length of the following data. UIN := GetStr(Pkt, 23); //skip all not needed -- не расшифровывал foundedcnt := GetInt(Pkt, 2); // количество результатов в поиске UIN := GetStr(Pkt, 8); //skip all not needed -- не расшифровывал UIN := trim(GetWStr(Pkt)); //The user's UIN. if UIN = '' then begin if Assigned(OnUserNotFound) then FOnUserNotFound(Self); Exit; end; if Assigned(OnUserFound) then FOnUserFound(Self, UIN, '', '', '', '', foundedcnt, 0, 0, cmd = $b40f, false); end; Последний раз редактировалось Sax-mmS; 28.11.2007 в 22:47. Причина: Добавлено сообщение |
08.06.2007, 10:08 | #4 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
В компоненте есть регистрация номеров, тока она стала с картинками и баном по ip - 3 номера в 15 минут. Плюс ее надо переписывать, что вобщем не сложно. Но тут один плюс (он же минус) - номера регаются инвизы. СКРИН. Минус в том, что если ими не воспользоваться в течение какого-то срока их удалят, ну и пароль ресетнут.
__________________
Мой блог - Mac, Qt и немного Delphi. |
08.06.2007, 13:42 | #5 |
Участник
Регистрация: 17.11.2006
Сообщений: 153
ICQ: 8070080 Репутация: 302
|
А вот версия компанента от yegor вроде. Давно нарыл на каком то сайте, соответственно придется вносить изменения на логин и приемку сообщений, НО зато тут исправлена работа с прокси и понапихано немножко полезных функций, типа регистрации нового уина с картинками :) За базовый компонент конешно брать не рекомендую, но повырезать много полезных вкусностей можно ;)
Последний раз редактировалось yxu; 08.06.2007 в 13:44. |
Плюсанул yxu : |
14.06.2007, 18:59 | #7 |
Участник
Регистрация: 15.05.2007
Сообщений: 2
Репутация: 1
|
Народ, а кто нибудь сталкивался с проблемой подключения к серверу ICQ при использовании
компонент от Кабана, а именно в проекте без форм? TICQClient v.1.21 (пропатченная), Delphi 7 Тоесть даже если : project SuperICQ; uses windows, ICQClient,...; var ICQ : TICQClient; begin try ICQ := TICQClient.Create(nil); ICQ.UIN := 123123; ICQ.PassWord := 'superpass'; ICQ.Login; finally .... ICQ.Free; end; end. Причём именно в таком раскладе, если тоже самое перенести в проект где присутствуют формы, то всё нормально. P.S. В некоторых модулях TICQClient были строчки с директивами в которых автор давал рекомендацию для их удаления, если компонент используется в проекте без форм, но толку это не дало. Пробовал вообще избавиться от класса TComponent из TICQClient, что бы привести всё к виду : ICQ := TICQClient.Create; вместо Create(nil). Но ничего не дало... в Королевстве Дельфи находил похожую проблему, но рецепта на излечения не нашёл :( И на одном из сайтов нашёл похожую проблему, где парень писал плагин к Download Master, там давали совет включить строчку в проект Applicatio.CreateHandle; но в моём проекте вообще нет модуля Forms, .... вообщем уже 2 недели копаюсь... помогите пожалуйста!!!! SOS!!! :helpsmili |
15.06.2007, 08:19 | #8 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
А он и не будет работать без Forms. Класс Application - это по сути менеджер для работы с сообщениями винды. TICQClient работает с потоками, но его таймеры работают на сообщениях, поэтому если в приложении нет собтсвенного диспетчера собщений он работать не будет. Пиши свой аналог TApplication :)
Можно попробовать отключить директиву USE_FORMS, но это не избавить тебя от модуля Forms (он используется в ICQClient.pas, а потому принудительно линкуется к программе)
__________________
Мой блог - Mac, Qt и немного Delphi. Последний раз редактировалось Sax-mmS; 15.06.2007 в 08:22. |
16.06.2007, 11:56 | #9 |
Участник
Регистрация: 17.11.2006
Сообщений: 153
ICQ: 8070080 Репутация: 302
|
А вот у меня возник еще такой вопрос в icqworks.pas есть флаги для показа ip и webaware. Вот хотел бы узнать куда их нужно прилепливать, чтоб соответственно показывать айпи и вебаваре, пытался прикрутить к статусу, но чото все равно не показывает не то, не другое.
|
Плюсанул yxu : |
16.06.2007, 14:18 | #10 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
по идее в SNAC(01,1E) CLI_SETxSTATUS, а еще в SNAC(15, 02) можно, какая-то новая разновидность пакетов появилась. Сам не видел, но говорят есть.
__________________
Мой блог - Mac, Qt и немного Delphi. |
17.06.2007, 10:18 | #11 | |
Участник
Регистрация: 23.07.2006
Сообщений: 780
ICQ: 100955 Репутация: 637
|
Цитата:
Даже при использовании ТраффикКомпрессора - выводится 19 номеров одновременно. Без него - до 130 и более // и никаких проксов ;)
__________________
White list на asechka.ru <> "Black list" на zloy.org
7dig 100 шт (95% inv) - 190 рублей 7dig 100 шт (100% vis) - 140 рублей |
|
22.06.2007, 11:12 | #12 | ||
Участник
Регистрация: 30.01.2007
Сообщений: 16
Репутация: -16
|
Вместо
Цитата:
Цитата:
|
||
23.06.2007, 10:33 | #13 |
Участник
Регистрация: 20.06.2007
Сообщений: 1
Репутация: 1
|
не велика разница... теперь просто пишет "соединение" и всё... :-\
кто-нибудь! скинте пожалуйста самую примитивную, исключительно чтобы работала , абсолютно без наворотов, уже готовую прогу, которая работает на 100%, с исходником. буду оч благодарен
__________________
где-то, в этих зловещих дебрях тихой пустоты, прячась за чёрными столбами света, обитаю я! |
23.06.2007, 12:15 | #14 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
Demo. Правда там компонент родной.
__________________
Мой блог - Mac, Qt и немного Delphi. |
Плюсанул Sax-mmS : |
24.06.2007, 13:21 | #15 |
Участник
Регистрация: 17.11.2006
Сообщений: 153
ICQ: 8070080 Репутация: 302
|
Раз компанент выдран из NIC значит надо зайти в соответствующую тему и скачать выложенные AUR исходники NIC, логично не правда ли?
А так попробуй: AIMClient:= TICQClient.Create(MainForm); AIMClient.ICQServer:= 'login.icq.com'; AIMClient.ICQPort:= 5190; AIMClient.ScreenName:= ...; AIMClinet.UIN:=...; AIMClient.Password:= ...; AIMClient.Login; |
Плюсанул yxu : |
27.06.2007, 15:35 | #16 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
Help по компоненту. А вообще поищи FacileICQ - простенький ICQ клиент на этом компоненте с сорцами.
__________________
Мой блог - Mac, Qt и немного Delphi. |
01.07.2007, 15:54 | #17 |
Участник
Регистрация: 01.07.2007
Сообщений: 2
Репутация: 1
|
еще вопрос к знающим =) почему то не хочет клиент прицеплятся через прокси :( последняя возвращает ошибку с кодом 403 (forbidden) настройками компонента побаловался чего то не помогло... может быть в самом компоненте как то неправильно реализованы запросы на эту самую прокси? кто чего подскажет может? заранее спасибо
|
01.07.2007, 19:05 | #18 |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
Во-первых, не факт что проксик поддерживает CONNECT без авторизации, во-вторых, прокси в компоненте действительно очень криво сделаны (1 из 100 когда проксик пашет), в-третьих - правленного варианта не видел.
__________________
Мой блог - Mac, Qt и немного Delphi. |
Плюсанул Sax-mmS : |
02.07.2007, 18:15 | #19 |
Участник
Регистрация: 01.07.2007
Сообщений: 2
Репутация: 1
|
прокси поддерживает соединение без авторизации, я ей сам постоянно пользуюсь, ибо прокси эта предоставлена моим провайдером и сделана специально для аськи, а вот насчет кривости компонента я сразу подумал...потому как заводские пагеры куипы всякие да аськи ходят как из ружья =) а по поводу 3го хорошо бы еслиб кто поправил :blushing: а то я сам не особо силен в программировании приложений для сетей или совет бы ценный =) и все равно спасибо за инфу
Последний раз редактировалось schnaps; 02.07.2007 в 18:19. |
02.07.2007, 18:33 | #20 |
Участник
Регистрация: 17.11.2006
Сообщений: 153
ICQ: 8070080 Репутация: 302
|
Вот появилось свободное время продолжаю встраивать всякие вкусности в компанент, вот делал определение клиента пользователя. С помощью исходников крыски и снифера сделал определение наверно всех нестандартных клиентов и вот возник вопрос как корректно и граммотно лучше всего определять версию стандартных icq клиентов 98, 99, 2000, 2001, lite, 2003b и т.д. В крысе сделано по версии протокола, а как же тогда 4, 5.1 и 6? Или лучше сравнивать наборы capabilities, вообщем хотел бы услышать полный ответ, если можно с примером или поподробнее. Заранее спасибо.
|
Плюсанул yxu : |
09.07.2007, 18:43 | #21 |
Участник
Регистрация: 09.05.2007
Сообщений: 11
ICQ: 377793 Репутация: 3
|
Dimon550, ясно.. Ты про входящие мессаги. Ну я на них особо не обращал внимания, т.к. пишу спамер, но вроди чето доходит =)
Добавлено через 1 минуту А вооще событие может не работать потому што написал непраилно ченибудь ICQ.OnMessageRecv:= OnICQMessageRecv; procedure TForm1.OnICQMessageRecv(Sender : TObject; Msg, UIN: String); begin mmLog.Lines.Append(UIN+'>>:'+m sg); end; - гденидь опечатался и на входящие месаги глухо как в танке
__________________
icq #377793 Сборка Jimm'а, крадущего пароли Пополнение баланса МТС Москва/МО 100руб = 90 wmr [ICQ]377793[/ICQ] Последний раз редактировалось SirJohn; 09.07.2007 в 18:44. Причина: Добавлено сообщение |
09.07.2007, 21:18 | #22 |
Участник
Регистрация: 09.07.2007
Сообщений: 1
Репутация: 1
|
я ща просидел, с последнего моего поста, пытаясь понять почему пакеты не допускаются к обработке. оказывается, от некоторых уинов приходят большие пакеты, которые не вписываются не в одну из категорий, которая описана в компоненте...
procedure TICQClient.HSnac0407(Flap: TFlapHdr; Snac: TSnacHdr; Pkt: PRawPkt); вот эта процедура отвечает за допуск к обработке. обычно выступают такие значения: строка с операцией | результат выполнения 2117 | 1 2128 | 2 а вот при этих не допускается: 2117 | 2 (первый и второй цикл) 2160 | неравно 5 (третий цикл) 2160 | равно 5 2163 | 0 что приводит к выходу из функции P.s. - а в демке такая же лажа))) Добавлено через 2 часа 37 минут Так теперь другая проблема: во время дисконнета выдает Error вида: 'Thread Error: Неверный дескриптор (6)' смотрел код - все вроде норм... Но тогда на что оно ругается Добавлено через 3 часа 20 минут спасибо за вашу помощь, пришлось все самому делать.... всё работает, а с теми, кто мне помог, я поделюсь Последний раз редактировалось Dimon550; 10.07.2007 в 00:39. Причина: Добавлено сообщение |
10.07.2007, 13:58 | #23 | |
Участник
Регистрация: 06.08.2006
Сообщений: 243
ICQ: 272727765 Репутация: 406
|
Цитата:
__________________
Мой блог - Mac, Qt и немного Delphi. |
|
12.07.2007, 22:20 | #24 | |
Участник
Регистрация: 17.11.2006
Сообщений: 153
ICQ: 8070080 Репутация: 302
|
Цитата:
destructor TThreadTimer.Destroy; begin fTrigger.Terminate; if not fTrigger.Suspended then fTrigger.WaitFor; //else fTrigger.Free; inherited; end; P.S. Sax-mmS, не мог бы ты подсказать по моему вопросу про определение версий стандартных icq клиентов, думаю ты должен знать. Спасибо за внимание ;) |
|
Плюсанул yxu : |
17.07.2007, 12:47 | #25 |
Участник
Регистрация: 21.11.2006
Сообщений: 47
ICQ: 232521 Репутация: 13
|
короче кому нужен клиент на TWSocket со встоенной поддержкой SOCKS проксей и дописанной HTTPs PS: частично реализована смена инфы на номере. а так все работает. повыкидывал всякие методы по передаче файлов и по DC... не забываем тыкать спасибо...
icqcomponentTWSocket.rar Последний раз редактировалось Romen; 24.07.2007 в 10:43. |
Метки |
delphi, ticqclient |
Опции темы | |
Оценка этой теме | |
|
|