ICQ - форум. Всё про ICQ.  

Вернуться   ICQ - форум. Всё про ICQ. > Мастерская > Программирование

Программирование C / C++ / Visual C++ / Delphi / Visual Basic / ASM / Windows / Pascal

 
 
Опции темы Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.48.
Старый 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.
Sax-mmS вне форума  
Плюсанули Sax-mmS — 3 :
Старый 01.06.2007, 11:59   #2
Участник
 
Регистрация: 21.11.2006
Сообщений: 47

ICQ: 232521

Репутация: 13
По умолчанию

Если поменять везде где идет отсылка/прием сообщений(авторизаций) тип UIN:LongWord на String то можно будет и на AIM ники писать мессаджи :)

Последний раз редактировалось Sax-mmS; 28.11.2007 в 22:47.
Romen вне форума  
Старый 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;
в ICQClient

Код:
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;
вот такая тема. НО КАК ВИДИТЕ в ответе только UIN. в принципе он меня и интересовал при поиске.

Последний раз редактировалось Sax-mmS; 28.11.2007 в 22:47. Причина: Добавлено сообщение
Romen вне форума  
Старый 08.06.2007, 10:08   #4
Участник
 
Регистрация: 06.08.2006
Сообщений: 243

ICQ: 272727765

Репутация: 406
По умолчанию

В компоненте есть регистрация номеров, тока она стала с картинками и баном по ip - 3 номера в 15 минут. Плюс ее надо переписывать, что вобщем не сложно. Но тут один плюс (он же минус) - номера регаются инвизы. СКРИН. Минус в том, что если ими не воспользоваться в течение какого-то срока их удалят, ну и пароль ресетнут.
__________________
Мой блог - Mac, Qt и немного Delphi.
Sax-mmS вне форума  
Старый 08.06.2007, 13:42   #5
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

А вот версия компанента от yegor вроде. Давно нарыл на каком то сайте, соответственно придется вносить изменения на логин и приемку сообщений, НО зато тут исправлена работа с прокси и понапихано немножко полезных функций, типа регистрации нового уина с картинками :) За базовый компонент конешно брать не рекомендую, но повырезать много полезных вкусностей можно ;)
Вложения
Тип файла: rar icqcomp.rar (85.4 Кб, 1309 просмотров)

Последний раз редактировалось yxu; 08.06.2007 в 13:44.
yxu вне форума  
Плюсанул yxu :
Старый 14.06.2007, 14:02   #6
Участник
 
Регистрация: 10.01.2007
Сообщений: 32

Репутация: 2
По умолчанию

Подскажите как выгрузить контакт лист с сервера???


____________________

:helpsmili :helpsmili :helpsmili
Sis вне форума  
Старый 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.
Sax-mmS вне форума  
Старый 16.06.2007, 11:56   #9
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

А вот у меня возник еще такой вопрос в icqworks.pas есть флаги для показа ip и webaware. Вот хотел бы узнать куда их нужно прилепливать, чтоб соответственно показывать айпи и вебаваре, пытался прикрутить к статусу, но чото все равно не показывает не то, не другое.
yxu вне форума  
Плюсанул 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.
Sax-mmS вне форума  
Старый 17.06.2007, 10:18   #11
Участник
 
Аватар для filippusik
 
Регистрация: 23.07.2006
Сообщений: 780

ICQ: 100955

Репутация: 637
По умолчанию

Цитата:
Сообщение от Isis
Ведь с 1 ip можно подключать не более 6 номеров, а тут прям =)
Это ты по своей локалке судишь или по GPRS )))

Даже при использовании ТраффикКомпрессора - выводится 19 номеров одновременно.
Без него - до 130 и более

// и никаких проксов ;)
__________________
White list на asechka.ru <> "Black list" на zloy.org
7dig 100 шт (95% inv) - 190 рублей
7dig 100 шт (100% vis) - 140 рублей
filippusik вне форума  
Старый 22.06.2007, 11:12   #12
Участник
 
Регистрация: 30.01.2007
Сообщений: 16

Репутация: -16
По умолчанию

Вместо
Цитата:
AIMClient.ScreenName:=SNEdit.T ext;
Надо
Цитата:
AIMClient.UIN:=StrToInt(SNEdit .Text);
ALnEtNoInA вне форума  
Старый 23.06.2007, 10:33   #13
Участник
 
Аватар для B.bl.M./7.E./l
 
Регистрация: 20.06.2007
Сообщений: 1

Репутация: 1
По умолчанию

не велика разница... теперь просто пишет "соединение" и всё... :-\
кто-нибудь! скинте пожалуйста самую примитивную,
исключительно чтобы работала , абсолютно без наворотов,
уже готовую прогу, которая работает на 100%, с исходником.
буду оч благодарен
__________________
где-то, в этих зловещих дебрях тихой пустоты, прячась за чёрными столбами света, обитаю я!
B.bl.M./7.E./l вне форума  
Старый 23.06.2007, 12:15   #14
Участник
 
Регистрация: 06.08.2006
Сообщений: 243

ICQ: 272727765

Репутация: 406
По умолчанию

Demo. Правда там компонент родной.
__________________
Мой блог - Mac, Qt и немного Delphi.
Sax-mmS вне форума  
Плюсанул Sax-mmS :
Старый 24.06.2007, 13:21   #15
Участник
 
Аватар для yxu
 
Регистрация: 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 вне форума  
Плюсанул yxu :
Старый 27.06.2007, 15:35   #16
Участник
 
Регистрация: 06.08.2006
Сообщений: 243

ICQ: 272727765

Репутация: 406
По умолчанию

Help по компоненту. А вообще поищи FacileICQ - простенький ICQ клиент на этом компоненте с сорцами.
__________________
Мой блог - Mac, Qt и немного Delphi.
Sax-mmS вне форума  
Старый 01.07.2007, 15:54   #17
Участник
 
Регистрация: 01.07.2007
Сообщений: 2

Репутация: 1
По умолчанию

еще вопрос к знающим =) почему то не хочет клиент прицеплятся через прокси :( последняя возвращает ошибку с кодом 403 (forbidden) настройками компонента побаловался чего то не помогло... может быть в самом компоненте как то неправильно реализованы запросы на эту самую прокси? кто чего подскажет может? заранее спасибо
schnaps вне форума  
Старый 01.07.2007, 19:05   #18
Участник
 
Регистрация: 06.08.2006
Сообщений: 243

ICQ: 272727765

Репутация: 406
По умолчанию

Во-первых, не факт что проксик поддерживает CONNECT без авторизации, во-вторых, прокси в компоненте действительно очень криво сделаны (1 из 100 когда проксик пашет), в-третьих - правленного варианта не видел.
__________________
Мой блог - Mac, Qt и немного Delphi.
Sax-mmS вне форума  
Плюсанул Sax-mmS :
Старый 02.07.2007, 18:15   #19
Участник
 
Регистрация: 01.07.2007
Сообщений: 2

Репутация: 1
По умолчанию

прокси поддерживает соединение без авторизации, я ей сам постоянно пользуюсь, ибо прокси эта предоставлена моим провайдером и сделана специально для аськи, а вот насчет кривости компонента я сразу подумал...потому как заводские пагеры куипы всякие да аськи ходят как из ружья =) а по поводу 3го хорошо бы еслиб кто поправил :blushing: а то я сам не особо силен в программировании приложений для сетей или совет бы ценный =) и все равно спасибо за инфу

Последний раз редактировалось schnaps; 02.07.2007 в 18:19.
schnaps вне форума  
Старый 02.07.2007, 18:33   #20
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

Вот появилось свободное время продолжаю встраивать всякие вкусности в компанент, вот делал определение клиента пользователя. С помощью исходников крыски и снифера сделал определение наверно всех нестандартных клиентов и вот возник вопрос как корректно и граммотно лучше всего определять версию стандартных icq клиентов 98, 99, 2000, 2001, lite, 2003b и т.д. В крысе сделано по версии протокола, а как же тогда 4, 5.1 и 6? Или лучше сравнивать наборы capabilities, вообщем хотел бы услышать полный ответ, если можно с примером или поподробнее. Заранее спасибо.
yxu вне форума  
Плюсанул yxu :
Старый 09.07.2007, 18:43   #21
Участник
 
Аватар для SirJohn
 
Регистрация: 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. Причина: Добавлено сообщение
SirJohn вне форума  
Старый 09.07.2007, 21:18   #22
Участник
 
Аватар для Dimon550
 
Регистрация: 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. Причина: Добавлено сообщение
Dimon550 вне форума  
Старый 10.07.2007, 13:58   #23
Участник
 
Регистрация: 06.08.2006
Сообщений: 243

ICQ: 272727765

Репутация: 406
По умолчанию

Цитата:
'Thread Error: Неверный дескриптор (6)'
Лечится выставлением DisableDirectConnections:= True
__________________
Мой блог - Mac, Qt и немного Delphi.
Sax-mmS вне форума  
Старый 12.07.2007, 22:20   #24
Участник
 
Аватар для yxu
 
Регистрация: 17.11.2006
Сообщений: 153

ICQ: 8070080

Репутация: 302
По умолчанию

Цитата:
'Thread Error: Неверный дескриптор (6)'
Открываем IcqWorks.pas ползем в самый низ и меняем как у меня:

destructor TThreadTimer.Destroy;
begin
fTrigger.Terminate;
if not fTrigger.Suspended then
fTrigger.WaitFor;
//else fTrigger.Free;
inherited;
end;

P.S. Sax-mmS, не мог бы ты подсказать по моему вопросу про определение версий стандартных icq клиентов, думаю ты должен знать. Спасибо за внимание ;)
yxu вне форума  
Плюсанул 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.
Romen вне форума  
Плюсанули Romen — 2 :
 

Метки
delphi, ticqclient

Опции темы
Оценка этой теме
Оценка этой теме:

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 02:00.


Перевод: zCarot
Форум Асечников © Asechka.RU

Новости Сочи