我成功发送了消息跨应用程序。但代码在FMX中不起作用。我可以找到FMX表单,但在dest没有收到消息。
发件人代码:
CDS.dwData:= 0; //Identify message
CDS.cbData:= ByteLength(Str);
CDS.lpData:= PChar(Str);
if DstHandle=0 then
DstHandle := Winapi.Windows.FindWindow(nil, PChar(TargetFormCaption));
if DstHandle<>0 then
begin
Res := SendMessage(DstHandle, WM_COPYDATA, Handle, NativeInt(@CDS));
Result:= True;
end
else
Result:= False;
结果为true,但未触发WMGetData
。
接收者代码:
procedure WMGetData(var Msg : TWMCopyData) ; message WM_COPYDATA;
...
procedure TForm3.WMGetData(var Msg: TWMCopyData);
begin
Caption:= 'Got something !';
end;
答案 0 :(得分:7)
FMX中的表单无法以与VCL表单相同的方式接收消息。 FMX不会调度FMX不使用的窗口消息。
解决此问题的干净方法是使用AllocateHWnd
创建一个可以接收邮件的窗口。即使对于VCL应用程序来说这也是正确的方法,因为这样的窗口不会重新创建。