How to make a child form listen to broadcasted messages #89

Question
I have two applications that I wish to talk with each other via Windows messages. Due to the nature of these applications, it would work best if I post a message using:
PostMessage(HWND_BROADCAST, MyMsg, 0, 0);
My question is how does a child form listen to messages that have been broadcasted without interfearing with them. (Some how make a hook into Application.OnMessage) but I'm not sure how to safely hook in and back out.

In the sender add a procedure such as:

procedure TForm1.Button2Click(Sender: TObject);
var
  Receiver: THandle;
  buffer: array[0..1023] of char;
  Data: TCopyDataStruct;
begin
  Receiver := FindWindow('TReceiverForm', nil);
  if Receiver > 0 then
  begin
    StrPLCopy(@buffer, Edit1.Text, 1024); // Assumes message in Editbox
    Data.dwData := 0;
    Data.cbData := 1024;
    Data.lpData := @buffer;
    SendMessage(Receiver, WM_COPYDATA, 0, LongInt(@Data));
  end;
end;

In the receiver add these:

type
  TForm1 = class(TForm)
    { ... }
  private
    { ... }
  protected
    procedure WmCopyData(var Msg: TMessage); message WM_COPYDATA;
  public
    { ... }
  end;

procedure TForm1.WmCopyData(var Msg: TMessage);
begin
  ShowMessage(
    'This message sent:' + #13 +
    string(PChar(PCopyDataStruct(Msg.LParam)^.lpData))
  );
end;
Original resource: The Delphi Pool
Author: Charles Hacker
Added: 2009/08/24
Last updated: 2009/08/24