2012-12-25 52 views
2

可能重複:
Inter-process communication互聯和通信程序

用Delphi,是沒有辦法,我建立一個溝通和彼此交互的兩個簡單方案的任何可能性,讓我們通過點擊說第一個按鈕中的另一個顯示消息。

這可能嗎?

+0

有關使用命名管道和tcp進行進程間過程的示例,請參見[Cromis IPC和IMC](http://www.cromis.net/blog/2012/05/cromis-ipc-and-cromis-imc-updated/)通訊。 –

+0

最簡單的解決方案是WM_COPYDATA –

+0

如果您可以更多地指定您在通信中查找的質量級別(QoS),將會有所幫助。諸如:你能否承受鬆散的信息,當一個應用程序沒有啓動時應該發生什麼。此外,性能和可伸縮性要求和消息類型/有效負載(如果有的話)。 –

回答

3

有許多possebilties對於IPC

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

等..

最簡單的方法是b e將消息發送到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

+0

,,請如果你能提供更多關於FindWindow和Tcp的細節,我不知道那些是什麼! –

+0

TCP是http://en.wikipedia.org/wiki/Transmission_Control_Protocol –

+0

thaaaaaank youuuuuuu! –

1

有關不同的系統和其他正在運行的應用程序提前要求,還有其他的o消息解決方案,如Microsoft Message Queuing(MSMQ)或基於跨平臺消息代理的解決方案,如開源系統Apache ActiveMQ,HornetQ和RabbitMQ。

使用這些消息系統,很容易實現可靠的點對點通信,即使接收方當前不在監聽也可以工作。

有Delphi/Free Pascal客戶端庫可用,商業和開源。