Передача данных между двумя приложениями
Для тестирования, поместите на форму 2 компонента TLabel и TButton, например, так:
Вот полный код для реализации этого:
Определить тип структуры сообщения, как здесь:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; { Определяем тип структуры сообщения } type TWMMYMessage = record Msg: Cardinal; // (ID сообщения ) Handle: HWND; // ( wParam , Handle отправителя ) Info: LongInt; // ( lParam , указатель на данные ) Result: LongInt; end; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } // переопределяем метод DefaultHandler procedure DefaultHandler(var Message); override; procedure WMMYMessage(var Msg: TWMMYMessage); end; var Form1: TForm1; { Объявляем переменную сообщения } WM_OURMESSAGE: DWORD; implementation {$R *.dfm} { Реализация наших методов 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; // проверяем, если сообщение не от нас if ee.Handle <> Handle then WMMYMessage(ee); end else inherited DefaultHandler(Message); end; end; procedure TForm1.WMMYMessage(var Msg: TWMMYMessage); begin Label1.Caption:= Format('Дескриптор формы другого приложения : %d', [Msg.Handle]); Label2.Caption:= Format('Ширина формы другого приложения : %d', [Msg.Info]); end; { Добавляем сообщение } procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Handle, Width); end; { Регистрируем наше сообщение } initialization WM_OURMESSAGE:= RegisterWindowMessage('Our broadcast message');
Компилируем и запускаем две копии приложения и проверяем все функциональные возможности.
Комментарии