Mega Code Archive

 
Categories / Delphi / Examples
 

Communicating between your applications

Title: Communicating between your applications. Question: I want to perform communication between two my applications or between two instances of my application. Answer: You can perform communication between your application using Windows messages exchange mechanism. We can use HWND_BROADCAST value for first parameter for SendMessage function for suppressing finding of forms' in other applications HANDLE. For using HWND_BROADCAST we should register our messages in Windows. For performing this you could make the following: (In example below we will inform about our form's top position) 1. Define type of your message structure, it could be something like this: 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; 2. Override your form's DefaultHandler method and add method for handling your message, like this TForm1 = class(TForm) ... public { Public declarations } ... procedure DefaultHandler(var Message); override; procedure WMMYMessage(var Msg: TWMMYMessage); ... end; 3. Declare message variable: var WM_OURMESSAGE: DWORD; 4. Insert realisation of DefaultHandler and our message handler methods: 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. Add registration of your message that you could handle the HWND_BROADCAST messages: initialization WM_OURMESSAGE := RegisterWindowMessage('Our broadcast message'); 6. Add the message sending somewhere: procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Handle, Top); end; 7. Compile and run two copies of your application and test it functionality.