我有两个应用程序,并且希望这两个应用程序在发布异常时进行通信发送。
问题如下: 在应用程序中我使用函数
Application.Handle
抓住应用程序的句柄。
在我的客户端,我使用:
ServerApplicationHandle: = FindWindow ('TForm1', 'Form1');
要知道我应该向哪个应用程序发送消息,但两者都返回不同的数字,他们会知道告诉我原因吗?
答案 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
。但是,您需要警惕窗口重新创建。
坦率地说,这听起来不像是进行进程间通信的最佳方式。也许您可以考虑套接字或命名管道。