用Delphi,是沒有辦法,我建立一個溝通和彼此交互的兩個簡單方案的任何可能性,讓我們通過點擊說第一個按鈕中的另一個顯示消息。
這可能嗎?
用Delphi,是沒有辦法,我建立一個溝通和彼此交互的兩個簡單方案的任何可能性,讓我們通過點擊說第一個按鈕中的另一個顯示消息。
這可能嗎?
有許多possebilties對於IPC
等..
最簡單的方法是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
,,請如果你能提供更多關於FindWindow和Tcp的細節,我不知道那些是什麼! –
TCP是http://en.wikipedia.org/wiki/Transmission_Control_Protocol –
thaaaaaank youuuuuuu! –
有關不同的系統和其他正在運行的應用程序提前要求,還有其他的o消息解決方案,如Microsoft Message Queuing(MSMQ)或基於跨平臺消息代理的解決方案,如開源系統Apache ActiveMQ,HornetQ和RabbitMQ。
使用這些消息系統,很容易實現可靠的點對點通信,即使接收方當前不在監聽也可以工作。
有Delphi/Free Pascal客戶端庫可用,商業和開源。
有關使用命名管道和tcp進行進程間過程的示例,請參見[Cromis IPC和IMC](http://www.cromis.net/blog/2012/05/cromis-ipc-and-cromis-imc-updated/)通訊。 –
最簡單的解決方案是WM_COPYDATA –
如果您可以更多地指定您在通信中查找的質量級別(QoS),將會有所幫助。諸如:你能否承受鬆散的信息,當一個應用程序沒有啓動時應該發生什麼。此外,性能和可伸縮性要求和消息類型/有效負載(如果有的話)。 –