procuro exemplo de troca de mensagens entre aplicativos com PostMessage e SendMessage

11/12/2009

2

Colegas delphianos

se alguém souber um link para baixar um exemplo de troca de mensagens entre aplicativos que faça uso de PostMessage e SendMessage, por favor, poste o link.

Gostaria de estudar troca de mensagens entre aplicativos


Responder

Posts

Depois de algumas pesquisas consegui fazer funcionar um exemplo de dois aplicativos no mesmo pc trocando mensagens via PostMessage (Windows API)

Venho disponibilizar o código


Aplicação receptora

unit Uprincipal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
   CM_AVISOS = WM_USER + 1;

type
  Tnprincipal = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
  private
    procedure CMavisos(var Msg: TMessage); message CM_AVISOS;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  nprincipal: Tnprincipal;

implementation

{$R *.dfm}
procedure TnPrincipal.CMavisos(var Msg: TMessage);
begin
   Edit1.Text := IntToStr(Msg.wParam);
   Edit2.Text :=  IntToStr(Msg.LParam);
   SetForegroundWindow(handle);
end;


initialization
   RegisterClass(Tnprincipal);

finalization
   UnRegisterClass(Tnprincipal);
end.



Aplicação emissora

unit UprincipalEnvia;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

const
   CM_AVISOS = WM_USER + 1;

type
  TnprincipalEnvia = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormDeactivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  nprincipalEnvia: TnprincipalEnvia;

implementation

{$R *.dfm}

procedure TnprincipalEnvia.Timer1Timer(Sender: TObject);
begin
   SetForegroundWindow(Handle);  //handle desta janela
 //  nprincipalEnvia.WindowState := wsNormal;
end;

procedure TnprincipalEnvia.Button1Click(Sender: TObject);
var aHandle: THandle; //handle da janela do outro aplicativo
begin
   aHandle := FindWindow('Tnprincipal', Nil);
   if aHandle <> 0 then
      PostMessage(aHandle, CM_AVISOS, 20155, 22334) //20155 e 22334 são os valores enviados
   else
      showmessage('janela não encontrada');
end;

procedure TnprincipalEnvia.FormDeactivate(Sender: TObject);
begin
   nprincipalEnvia.WindowState := wsMinimized;
end;


Responder