重複の可能性:
プロセス間通信
Delphi を使用して、互いに通信して対話する 2 つの単純なプログラムを作成する可能性はありますか。たとえば、最初のボタンをクリックすると、もう 1 つのボタンにメッセージが表示されます。
出来ますか?
IPCには多くの可能性があります
等々 ...
最も簡単な方法は、FindWindow Named Pipes によって検出されたウィンドウ ハンドルにメッセージを送信することであり、大規模な通信には TCP-IP を使用する必要があります。
マイクロデモ:
最初のプロジェクト:
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.
2 番目のプロジェクト:
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を使用できます
さまざまなシステムやその他の高度な要件で実行されるアプリケーションには、Microsoft Message Queuing (MSMQ) などのメッセージング ソリューションや、オープン ソース システムの Apache ActiveMQ、HornetQ、RabbitMQなどのクロスプラットフォーム メッセージ ブローカー ベースのソリューションもあります。
これらのメッセージング システムを使用すると、受信者が現在リッスンしていない場合でも機能する、信頼性の高いピア ツー ピア通信を簡単に実装できます。
利用可能な Delphi / Free Pascal クライアント ライブラリ、商用およびオープン ソースがあります。