Я использую следующий код в серии программ; одна программа запускает программы, и когда каждая программа завершает свою работу, они отправляют сообщение обратно в средство запуска, которое они закончили. Ключом к программе является использование параметра HWND_BROADCAST: сообщение отправляется всем работающим программам на компьютере, но, конечно, оно обрабатывается только теми, кто имеет правильный обработчик сообщений.
В программе, которая должна отправить сообщение, напишите
SendMessage (HWND_BROADCAST, RegisterWindowMessage ('message'), 0, 0);
Очевидно, что вы бы заменили 'message' некоторой строкой, которая является константой в обеих программах (той, которая отправляет, и той, которая получает).
Я не рекомендую использовать параметр lparam SendMessage для передачи данных в принимающую программу; это должен быть указатель, и, конечно, указатель на данные в программе 1 будет указывать на мусор в программе 2. Можно привести longint к указателю и отправить его, который затем должен быть разыменован на принимающей стороне
В принимающей программе
type
TWMMYMessage = record
Msg: Cardinal; // ( first is the message ID )
Handle: HWND; // ( this is the wParam, Handle of sender)
Info: Longint; // ( this is lParam, pointer to our data)
Result: Longint;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
wm_Launcher:= RegisterWindowMessage ('message')
// wm_launcher is a private member of TForm
.
.
.
end;
procedure TForm1.DefaultHandler(var Message);
var
ee: TWMMYMessage;
begin
with TMessage (Message) do
begin
if (Msg = wm_Launcher) 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
startbtnclick (nil) // here we actually do something when the message is received
end;