Карта сайтаСсылкиКонтакты

Передача данных между двумя приложениями

PDF Печать
Статьи

Связь между двумя приложениями можно выполнить, используя механизм обмена сообщений Windows. Мы можем использовать значение HWND_BROADCAST как первый параметр для функции SendMessage.

Для использования HWND_BROADCAST мы должны регистрировать наши сообщения в Windows.

Для тестирования, поместите на форму 2 компонента TLabel и TButton, например, так:

Пример разрабатываемой формы

Вот полный код для реализации этого:

1. Определить тип структуры сообщения, как здесь:


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');
end.

Компилируем и запускаем две копии приложения и проверяем все функциональные возможности.

Работающие приложение обмениваются данными

Скачать исходник


 

Добавить комментарий


Защитный код
Обновить