使用DELPHI与Windows上的两个应用程序进行通信

时间:2014-04-09 13:54:31

标签: windows delphi communication

我有两个应用程序,并且希望这两个应用程序在发布异常时进行通信发送。

问题如下: 在应用程序中我使用函数

Application.Handle 

抓住应用程序的句柄。

在我的客户端,我使用:

ServerApplicationHandle: = FindWindow ('TForm1', 'Form1');

要知道我应该向哪个应用程序发送消息,但两者都返回不同的数字,他们会知道告诉我原因吗?

2 个答案:

答案 0 :(得分:2)

如前所述(主要)形式和应用是两回事 自Delphi 2007以来,还有另一种需要注意的行为。 依赖于Application.MainformOnTaskbar,您可以(或不)通过Findwindow获取句柄。

显示不同行为的小小宣传

var
  FW_ah, FW_mfh, ah, mfh: THandle;

  Procedure Display(OnTask: Boolean);
  begin
    Application.MainFormOnTaskbar := OnTask;
    ah := Application.Handle;
    mfh := MainForm.Handle;
    FW_ah := FindWindow(PChar(Application.ClassName), PChar(Application.Title));
    FW_mfh := FindWindow(PChar(ClassName), PChar(Caption));
    Showmessage(Format('ah: %d FW_ah: %d  -  mfh: %d FW_mfh: %d', [ah, FW_ah, mfh, FW_mfh]));
  end;

begin
  Display(true);
  Display(false);
end;

答案 1 :(得分:1)

  • Application.Handle是与全局Application对象关联的隐藏窗口的窗口句柄。
  • FindWindow('TForm1', 'Form1')将返回应用程序中顶级表单的窗口句柄。

这些确实不是一回事。我想,您可以使用Form1.Handle代替Application.Handle。但是,您需要警惕窗口重新创建。

坦率地说,这听起来不像是进行进程间通信的最佳方式。也许您可以考虑套接字或命名管道。