互联和通信程序

时间:2012-12-25 09:10:23

标签: delphi ipc

  

可能重复:
  Inter-process communication

使用Delphi,我是否有可能构建两个相互通信和交互的简单程序,让我们说点击第一个按钮,另一个按钮显示消息。

可能吗?

2 个答案:

答案 0 :(得分:3)

IPC有许多拥有权

  • 发送窗口消息
  • 使用命名管道
  • 使用TCP-IP / UDP
  • 共享内存

依旧......

最简单的方法是将消息发送到FindWindow找到的窗口句柄 应该优先使用命名管道和TCP-IP进行广泛的通信。

Microdemo:

第一个项目:

unit Unit2; 

interface

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

type
  TTMiniDemoSender = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  TMiniDemoSender: TTMiniDemoSender;

implementation

{$R *.dfm}
Const
     C_MyMessage=WM_USER + 1234;



procedure TTMiniDemoSender.Button1Click(Sender: TObject);
var
 wnd:HWND;
begin
    wnd := FindWindow('TTMiniDemoReceiver',nil);
  if wnd<>0 then SendMessage(wnd,C_MyMessage,123,456);

end;

end.

第二个项目:

unit Unit1;

interface

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

Const
     C_MyMessage=WM_USER + 1234;
type

  TTMiniDemoReceiver = class(TForm)
  private
    { Private-Deklarationen }
    Procedure MyMessage(var MSG:TMessage); message C_MyMessage;
  public
    { Public-Deklarationen }
  end;

var
  TMiniDemoReceiver: TTMiniDemoReceiver;

implementation

{$R *.dfm}

{ TTMiniDemoReceiver }

procedure TTMiniDemoReceiver.MyMessage(var MSG: TMessage);
begin
   Showmessage(IntToStr(MSG.WParam) + '-' + IntToStr(MSG.LParam) );
   msg.Result := -1;
end;

end.

要传输更多信息,您可以使用WM_CopyData

答案 1 :(得分:1)

对于在不同系统和其他预付款要求上运行的应用程序,还有消息传递解决方案,如Microsoft Message Queuing(MSMQ)或基于跨平台消息代理的解决方案,如开源系统Apache ActiveMQ,HornetQ和RabbitMQ的。

通过这些消息传递系统,可以轻松实现可靠的点对点通信,即使接收器当前没有收听也能正常工作。

有Delphi / Free Pascal客户端库可用,商业和开源。