PDA

Просмотр полной версии : Ошибка в плагине.


goodvin1709
16.01.2012, 01:10
Решыл я подключить к L2ph Icq
вот скачал сам компонент.http://rghost.ru/35927500
вот сам плагин



library ICQplugin;

uses
FastMM4 in 'fastmm\FastMM4.pas',
FastMM4Messages in 'fastmm\FastMM4Messages.pas',
usharedstructs in 'units\usharedstructs.pas',
Windows, Messages, SysUtils, Variants, Classes, Controls,
XPMan, StdCtrls, ICQClient, ExtCtrls, ComCtrls;

var
ps:TPluginStruct;
ICQ: TICQClient;

Procedure SENDICQMESSAGE(text:String);
begin
icq.SendMessage(Моя ася куда спамить,text);
end;

procedure OnLoad; stdcall;
begin
icq:=TICQClient.Create(nil);
icq.ICQPort:=5190;
icq.ICQPortViaHTTP:=80;
icq.ICQServer:='login.icq.com';
icq.ICQServerViaHTTP:='http.proxy.icq.com';
icq.Password:='********';//Пасс
icq.PortRangeFirst:=3000;
icq.PortRangeLast:=50000;
ICQ.UIN:=******;//Ид для авторизации
icq.Login();
end;

procedure OnFree; stdcall;
begin
icq.Disconnect;
icq.Destroy;
end;

function GetPluginInfo(const ver: cardinal): PChar; stdcall;
begin
Result:='ICQ_Plugin'+sLineBreak+
'Procedure SendICQMessage(text:String);';
end;

function SetStruct(const struct: PPluginStruct): Boolean; stdcall;
begin
ps:=struct^;
Result:=True;
end;

Procedure OnRefreshPrecompile; stdcall;
begin
ps.UserFuncs.Add('Procedure SENDICQMESSAGE(text:String)');
end;

function OnCallMethod(const ConnectId, ScriptId: integer;
const MethodName: String; // имя функции в верхнем регистре
var Params, // параметры функции
FuncResult: Variant // результат функции
): Boolean; stdcall; // если вернёт True то дальнейшая
// обработка функции прекратиться
begin
Result := false;
if MethodName='SENDICQMESSAGE' then
begin
SENDICQMESSAGE(params[0]);
Result:=true;
end;
end;

exports
GetPluginInfo,
SetStruct,
OnCallMethod,
OnRefreshPrecompile,
OnLoad,
OnFree;

begin

end.



проблема в том что плагин как бы пытается зайти в асю но невходит в чём тут можеть быть причина подскажыте.
А вот под этим кодом в Delphi 7 норм пашет:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XPMan, StdCtrls, ICQClient, ExtCtrls, Buttons, ComCtrls;

type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
XPManifest1: TXPManifest;
ICQClient1: TICQClient;
Button3: TButton;
Label6: TLabel;
Memo2: TMemo;
Timer1: TTimer;
Label1: TLabel;
Edit1: TEdit;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure ICQClient1Login(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
f:TstringList;
MyUIN,MyTarget:Cardinal;
MyPass:String;
implementation

uses Unit2;

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
f:=Tstringlist.Create();
f.LoadFromFile('Options.ini');
MyUIN:=STRTOINT(f.Strings[0]);
MyPass:=f.Strings[1];
MyTarget:=STRTOINT(f.Strings[2]);
timer1.Enabled:=False;
timer1.Interval:=20000;
ICQClient1.UIN:=MyUIN;
ICQClient1.Password:='********';
ICQClient1.ConvertToPlaintext:=true;
ICQClient1.Login();
Timer1.Enabled:=True;
label1.Visible:=false;
button3.Enabled:=false;
edit1.Enabled:=false;
memo2.Enabled:=false;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ICQClient1.Disconnect;
label1.Color:=clred;
label1.Caption:='Offline';
f.Free;
end;

procedure TForm1.ICQClient1Login(Sender: TObject);
begin
if ICQClient1.LoggedIn then
begin
Timer1.Enabled:=False;
label1.Visible:=True;
label1.Color:=cllime;
label1.Caption:='Online';
button3.Enabled:=True;
edit1.Enabled:=True;
memo2.Enabled:=True;
statusbar1.Panels.Items[0].Text:='Logined.OK..['+IntToStr(ICQClient1.UIN)+']';
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If not ICQClient1.LoggedIn then
begin
label1.Visible:=True;
Timer1.Enabled:=False;
label1.Color:=clRed;
label1.Caption:='Offline';
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
icqclient1.SendMessage(MyTarget, ''+ edit1.Text+'' );
memo2.Lines.Add(IntToSTR(ICQClient1.UIN)+' :'+edit1.text);
edit1.Clear;
end;
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
icq: cardinal;
begin
icq := StrToInt(UIN);
Memo2.Lines.Add(UIN + ' :' + Msg);
end;
end.

http://s010.radikal.ru/i311/1201/91/f99980bddced.jpg

xkor
16.01.2012, 01:37
проблема в том что плагин как бы пытается зайти в асю но невходита как он ругается, что сообщает вместо того что бы войти?

SeregaZ
16.01.2012, 03:55
мн. ув. xkor, нельзя ли произвести на свет плагин для л2пх следующего вида:
1. в нем стоит отлов активного, в данный момент окна-чара
2. в нем стоит отлов нажатий клавишь 1-2-3-4-5-6-7-8-9-0
3. в скрипте появляется возможность привязать, во время когда окно с заданным чаром активно, курсор не находится в поле ввода текста, и нажата клавиша 1, в том ряду что над буквами (цифровой блок все-таки далековато и не удобен), какую либо функцию, отправку пакета, заюз скила.

объясняю: С4 очень старые хроники и не имеют трех этажной панельки для скилов. для чего предлагаю подобный плагин, который бы расширил линейку горячих клавиш на цифры 1234567890.

supernewbie
16.01.2012, 05:55
SeregaZ, можно

goodvin1709
16.01.2012, 11:09
Проблема в коде что войти пытается но невходит в асю и все(((
просто висит в офлайне.
Я немогу понять почему он не входит.не каких ошибок нету.

supernewbie
16.01.2012, 11:24
Я немогу понять почему он не входит.не каких ошибок нету.
тут два варианта:
1. ошибки всё-таки есть
2. твой компилятор заколдован

PS скорее всего компаненту нужен хендл, заалочь

SeregaZ
16.01.2012, 17:31
может быть протокол аськи чуток устарел и там какие-то изменения?

goodvin1709
16.01.2012, 18:09
Видишь в асю с проги заходит отлично а если ее перенести на плагин так пытается зайти и нечего непроисходит...хотя какой протокол я там все настраивал сам)

SeregaZ
16.01.2012, 19:25
а ты научи л2пх отлавливать пакеты аськи да посмотри выходят ли пакеты, если выходят то какие, приходит ли ответ. сниффер нужен :) тем самым определим место затыка.

goodvin1709
16.01.2012, 19:54
Чё бля какие пакеты аськи ты о чём??

Добавлено через 2 минуты
место затыка в процедуре icq.login

alexteam
16.01.2012, 21:11
он просто не прочитал 1 пост\неподумал (про протоколверсион). тупо сморозил хрень не понимая что происходит (про отправку пакетов).
за ним такое часто наблюдается, не обращай внимания.

суперньюби прав скорей всего.
сама компонента использует неблокирующие сокеты, соотвественно виндовые сообщения, соотвественно ей нужно "Окно"

варианты -
1. анализ кода компоненты. предоставление всего что ей нужно для работы.
2. переписываем под "потокобезопасность".

SeregaZ
16.01.2012, 22:03
ну я так полагаю, что аська что-то должна посылать на сервер типа:
привет, я аська
здарова, я сервер
как дела?
пока не родила.

вот. если пакеты идут - значит фаервол пускает, процедура отправки пашет. и дело в неправильности пакетов или в процедуре их формирования. если пакеты от аськи не идут - значит затык в отправке.

goodvin1709
16.01.2012, 22:22
Блин,это не ла2 тебе запрос пошел на логин и все причём там пакеты ну блин они вобще там непричём,там нужно наверное окно для логина потом вставлю.времени нету.Ты первый пост прочитай и посмотри исходники 2 шт.

SeregaZ
16.01.2012, 23:15
не понимаешь :) я видимо из-за того что не русский... в казахстане живу... я о том, что плагин должен формировать этот самый логин и посылать его на сервер. а сервер должен послать ответ. смотрим сниферром - общается ли наша аська или не общается. если не общается - значит ошибка где-то на стадии отправки. то есть плагин не может открыть соединение и послать сообщение. если логин все таки пошел, и видно в снифере что что-то полетело и был ответ - значит механизм отправки пашет, и дело надо искать в другом, а точнее в формировании пакета, то есть так сказать "конвертирование" текстового логина и пароля в понятный серверу пакет информации или ошибка в моменте принятия информации. типа логин он отправляет правильно, а понять ответ подошел ли логин или пароль не верный - не может или понимается но не правильно и поэтому тупит.

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

supernewbie
17.01.2012, 02:45
SeregaZ, ой ёпта, ну говорят же, что с формой робит, без формы не робит, как отсутствие формы влияет на протокол? ты прямо шерлок холмс

goodvin1709
17.01.2012, 02:46
Сюда както нужно прикрутить OnLogin Процедуру.
как это сделать я вобще хз
так как пишу
icq.OnLogin:=ICQLogin;
Procedure ICQLOGIN;
begin
end;
выдает ошыбку что типо это невозможно помогите как вставить туда процедуру?

supernewbie
17.01.2012, 02:50
goodvin1709, там должен быть метод, и попробуй ты уже дать клиенту хендл (пробуй сунуть ему как-нить хендл как значение из AllocateHwnd\сунуть ему Application при создании\форму сделать какую-нибудь и её ему пихать при создании и тд)

goodvin1709
17.01.2012, 03:20
Блин пересунул полную программу туда и если с .exe скомпилиную запускать то логинится.
если такую же копию кода пихать в Dll то нелогинится.(((

SeregaZ
17.01.2012, 03:40
и не робит - пакет всетаки уходит, или даже до посылки не доходит?
формат ввода текста? :) может в форме один, в теле плагина другой.

антивирус. типа компилированный проект это одно, запуск из плагина другое - может блочит?

а таймер в плагине где? я думаю раз в примере есть, то и там наверное должен быть.

незнаю что делать с этим "компонент" но даты там 2008 года. нельзя найти этого волкова и попросить версию посвежее?

goodvin1709
17.01.2012, 04:24
Вот видос проблемы.
сама прогграма запускается а плагин нет.
http://rghost.ru/35946389
пасс:"coderx.ru"
причем все перенес в плагин.уже незнаю как запустить асю в плагине это ппц.
Вот и сам плагин(сорца)...
http://rghost.ru/35946445
помогите исправить чтобы залогинился.

supernewbie
17.01.2012, 04:34
мб хоть ссыль на компанент дашь?

goodvin1709
17.01.2012, 04:38
-------->Вот тут компонент<-------- (http://rghost.ru/35927500)(он был в 1 посту)

supernewbie
17.01.2012, 04:45
давай сюда свой option.ini, вернее не сюда а в личку, там ж пароль наверное

goodvin1709
17.01.2012, 04:50
Отправил.

supernewbie
17.01.2012, 05:41
короче пх хавает мессаджи icq клиента

Добавлено через 3 минуты
блеа, хз че там пх делает с плагинами, но вот так работает :D :

procedure OnLoad; stdcall;
begin
Application.CreateForm(TForm1,Form1);
form1.Show;
repeat
Application.HandleMessage;
until Application.Terminated;
end;

alexteam
17.01.2012, 05:46
блеа, хз че там пх делает с плагинами
пх не причем.
хочеш неблокирующий сокет - предоставь цикл для обработки оконных сообщений и то куда эти оконные сообщения будут отправлятся.
в стандартном прожекте с формой об этом заботится application.run
кстати, воттаким онлоадом ты разве пх не вешаешь ? )

supernewbie
17.01.2012, 05:49
а че Application.run в пх не заботится о мессаджах клиента?

хотя у меня какое-то смутное сомнение что Application в дллке и в пх это разные вещи

Добавлено через 2 минуты


кстати, воттаким онлоадом ты разве пх не вешаешь ? )
кстати да, сам удивился, но нет)

goodvin1709
17.01.2012, 10:40
Ух

procedure OnLoad; stdcall;
begin
Application.CreateForm(TForm1,Form1);
form1.Show;
repeat
Application.HandleMessage;
until Application.Terminated;
end;

Я вобще хз но так тоже вроде нелогинится.
А да пароль неправильный был..