IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   широковещательное сообщение (delphi) (http://www.imho.ws/showthread.php?t=80284)

steelik 21.02.2005 19:26

широковещательное сообщение (delphi)
 
Как послать широковещательное сообщение BROADCAST ? Знаю, что нужно юзать ф-ю SendMessage, но из-за малоопытности чтоли, не догоняю. Пример если можно!

chesnok 21.02.2005 20:23

C++ syntax
Код:

LRESULT lMsgResult = SendMessage(HWND_BROADCAST, WM_YOURMESSAGE, your_wParam, your_lParam)
Delphi syntax
Код:

var
a : Integer;
<...>
a := SendMessage(HWND_BROADCAST,...);

SendMessage не возвращает управления до тех пор, пока не получит от окна ответа на месседж, так что в нек. случаях имеет смысл использовать аналогичную ф-ю PostMessage, возвращающую управление сразу.

CEO 21.02.2005 20:54

Можно так, наверное:
Цитата:

// 1. Определение типа структуры вашего сообщения, может быть следующим:
type
TWMMYMessage = record
Msg: Cardinal; // ( идентификационный номер сообщения -- ID )
Handle: HWND; // ( заголовок (wParam, Handle) отправителя)
Info: Longint; // ( это lParam, указатель на наши данные)
Result: Longint;
end;
// 2. Теперь нужно перекрыть DefaultHandler и добавить
// новый метод для обработки вашего сообщения, например так:
TForm1 = class(TForm)
...public
{ Public declarations }
...procedure DefaultHandler(var Message); override;
procedure WMMYMessage(var Msg: TWMMYMessage);
...end;
// 3. Объявление переменной сообщения :
var
WM_OURMESSAGE: DWORD;
// 4. Реализация метода заголовка DefaultHandler и сообщения:
procedure TForm1.DefaultHandler(var Message);
var
ee: TWMMYMessage;
begin
with TMessage(Message) do
begin
if (Msg = WM_OURMESSAGE) then
begin
ee.Msg := Msg;
ee.Handle := wParam;
ee.Info := lParam;
// Checking if this message is not from us
if ee.Handle <> Handle then
WMMYMessage(ee);
end
else
inherited DefaultHandler(Message);
end;
end;
procedure TForm1.WMMYMessage(var Msg: TWMMYMessage);
begin
label1.Caption := Format('Our another form handle :%d', [Msg.Handle]);
Label2.Caption := Format('Our another form top :%d', [Msg.Info]);
end;
// 5. Регистрация широковещательного сообщения (HWND_BROADCAST)
initialization
WM_OURMESSAGE := RegisterWindowMessage('Our broadcast message');
// 6. Для отсылки сообщения:
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Handle, Top);
end;

steelik 21.02.2005 22:01

ОК, спасибо! А вот то что в Windows имеется сервис такой Messager ? Он слушает сообщения по BROADCAST или это из другой оперы?


Часовой пояс GMT +4, время: 22:05.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.