Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "WinAPI";
Поточний архів: 2004.12.12;
Завантажити: [xml.tar.bz2];

Вниз

вилов повідомлень Знайти схожі гілки


AlexeyM   (2004-10-20 01:44) [0]

нижченаведеними кодом намагаюся зловити повідомлення з однієї проги в інший, але подія не доходить до одержує форми, тільки після того як зробив так: application.OnMessage: = form1.appmessagehandler; в form1.appmessagehandler; зміг зловити потрібну подію. скажіть що потрібно зробити щоб нижченаведений код форма змогла обробити без form1.appmessagehandler;
{
This is useful if you want to send a message from your DLL back
to the calling application.
}

сопзЬ
MY_MESSAGE = WM_USER + 4242;

type
TForm1 = class (TForm)
Button1: TButton;
procedure Button1Click (Sender: TObject);
// Handler that receive the Message
procedure MessageReceiver (var msg: TMessage); message MY_MESSAGE;
end;

було
Form1: TForm1;

реалізація

{$ R * .DFM}

procedure TForm1.Button1Click (Sender: TObject);
було
txt: string;
починати
txt: = "Hello World";
SendMessage (Form1.Handle, MY_MESSAGE, 0, DWORD (PChar (txt)));
end;

// To receive this custom Message that is addressed to form1.handle
// you need a message handler.

procedure TForm1.MessageReceiver (var msg: TMessage);
було
txt: PChar;
починати
txt: = PChar (msg.lParam);
msg.Result: = 1;
ShowMessage (txt);
end;

end.



GanibalLector ©   (2004-10-20 01:48) [1]

-------------------------------------------------- ---------------
одержувач:

procedure ReceiveMessage (var Msg: TMessage);
повідомлення WM_COPYDATA;
...
procedure TFormReceive.ReceiveMessage;
було
pcd: PCopyDataStruct;
починати
pcd: = PCopyDataStruct (Msg.LParam);
Caption: = PChar (pcd.lpData);
end;

відправник:

procedure TFormXXX.Button1Click (Sender: TObject);
було
cd: TCopyDataStruct;
починати
cd.cbData: = Length (Edit1.Text) + 1;
cd.lpData: = PChar (Edit1.Text);
SendMessage (FindWindow ( "TFormReceive", nil), WM_COPYDATA, 0, LParam (@cd));
end;



AlexeyM   (2004-10-20 01:51) [2]

Так я теж пробував причому мені не важлива доставка тексту хоча б просто щоб повідомлення ловилося формою



GanibalLector ©   (2004-10-20 02:02) [3]

хоча б просто щоб повідомлення ловилося формою
Так воно і ловітся.Ето реальний приклад, між іншим.
Єдине, так це FindWindow (ім'я_класу, текст) і все



GanibalLector ©   (2004-10-20 02:05) [4]

До речі, тільки що додивився на твій код.Надо так:
...
приватний
procedure MessageReceiver (var msg: TMessage); message MY_MESSAGE;
громадськість
...



GuAV ©   (2004-10-20 02:07) [5]


> Треба так:

Краще так, але не строго обов'язково ;-)



AlexeyM   (2004-10-20 02:45) [6]

Я теж в private кидав але ніякого ефекту, тільки до form1.appmessagehandler повідомлення доходять: ((



GanibalLector ©   (2004-10-20 02:55) [7]

Я теж в private кидав але ніякого ефекту, тільки до form1.appmessagehandler повідомлення доходять

Нісенітниця якась...
Ну, ось тобі ще один приклад:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const _mymessage = wm_user + 318; type TForm1 = class (TForm) Button1: TButton; procedure Button1Click (Sender: TObject); private procedure MyMessage (var Msg: TMessage); message _mymessage; public {Public declarations} end; var Form1: TForm1; implementation {$ R * .DFM} procedure TForm1.MyMessage (var Msg: TMessage); begin Caption: = inttostr (Msg.LParam) + "" + inttostr (Msg.WParam); end; procedure TForm1.Button1Click (Sender: TObject); begin sendmessage (Form1.Handle, wm_user + 318, WParam (random (100)), LParam (random (100))); end; end.



AlexeyM   (2004-10-20 03:02) [8]

спасибі за відповіді GanibalLector, але мені треба послати мессагу в іншій програмі
(Всередині однієї проги все працює)
плачу гіркими сльозами: (((



Германн ©   (2004-10-20 04:21) [9]

2 AlexeyM (20.10.04 03: 02) [8]
Послати message з однієї проги в іншу - це як "два пальці об асфальт".

Але ж тобі вже відповіли "Як треба послати текст"В ту, іншу прогу!

Тільки за допомогою WM_COPYDATA можна реалізувати цей сабж!



Jetus ©   (2004-10-25 22:13) [10]

А як на рахунок того, щоб відловити повідомлення в програмі, написаної на чистому АПИ де немає форм?



BillyJeans   (2004-10-26 12:09) [11]

2 Jetus © (25.10.04 22: 13) [10]
це як?



Jetus ©   (2004-10-27 23:44) [12]

Ну ... у мене консольний додаток, яке висить в пам'яті за допомогою

while GetMessage (Mesg, 0, 0, 0) do begin
TranslateMessage (Mesg);
DispatchMessage (Mesg);
end;

Так як в такій програмі відловити надіслане їй повідомлення WM_COPYDATA від іншої програми ???



Игорь Шевченко ©   (2004-10-27 23:59) [13]

Jetus © (27.10.04 23: 44) [12]


> Так як в такій програмі відловити надіслане їй повідомлення
> WM_COPYDATA від іншої програми ???


У тебе в віконному класі віконна процедура є? Ось в ній і лови WM_COPYDATA.

У повітря: І нафіга народ на API пише, якщо такі питання задає? Хоч би Петцольда почитали для розвитку.



colonel   (2004-10-30 14:41) [14]

А хто такий Петдольц :-) Хочу почитати. Де вять?



Redhopter ©   (2004-10-31 08:02) [15]

Ось лові..код з WinAPI help (c)
Як передати рядок іншому додатку?

Використовувати повідомлення WM_COPYDATA.

додаток одержувач:
...
TMyForm1 = class (TForm)
private
...
procedure ReceiveMessage (var Msg: TMessage); message WM_COPYDATA;
...
end;
...

реалізація

...

procedure TMyForm.ReceiveMessage;
було
pcd: PCopyDataStruct;
починати
pcd: = PCopyDataStruct (Msg.LParam);
Caption: = PChar (pcd.lpData);

end;

додаток відправник:

procedure TFormXXX.Button1Click (Sender: TObject);
було
cd: TCopyDataStruct;
починати
cd.cbData: = Length (Edit1.Text) + 1;
cd.lpData: = PChar (Edit1.Text);
SendMessage (FindWindow ( "TMyForm1", nil),
WM_COPYDATA, 0, LParam (@cd));
end;



Redhopter ©   (2004-10-31 08:05) [16]

Якщо не буде ловити, то в пропиши в Findwindow (nil, "Заголовок вікна") ...
Заголовок вікна, якщо не знаєш, можеш в диспетчері задачь подивитися (він викликається Alt-Ctrl-Del)



AlexeyM   (2004-11-01 01:54) [17]

по цьому прикладу тож пробував, причому не важлива посилка тексту, просто якщо я роблю за вашим прикладом то процедура в додатку яке повинно отримати не виконується, хоча повідомлення доходять до form1.appmessagehandler



сторінки: 1 вся гілка

Форум: "WinAPI";
Поточний архів: 2004.12.12;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.62 MB
Час: 0.065 c
1-1100888593
Kurtevich
2004-11-19 21:23
2004.12.12
втрата модальності


3-1100246020
Янн
2004-11-12 10:53
2004.12.12
даленіє рядки


14-1100853189
саке
2004-11-19 11:33
2004.12.12
Потрібна програма для роботи з дескрипторами вікон


1-1101728157
Галинка
2004-11-29 14:35
2004.12.12
Проблеми з QRImage


1-1101835736
кактус
2004-11-30 20:28
2004.12.12
Динамічна обраьотка подій.





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська