delphi – WM_COPYDATA字符串未出现在目标应用程序中
发布时间:2020-12-15 09:36:09 所属栏目:大数据 来源:网络整理
导读:我正在尝试在Delphi 2010中的两个应用程序之间传递信息. 我正在使用我过去成功使用的简化版代码(简化因为我不需要发件人知道发送已成功)我已经将收到的发送归结为一对示例应用程序,实质上如下 发送 procedure TMF.SendString;var copyDataStruct: TCopyDataS
我正在尝试在Delphi 2010中的两个应用程序之间传递信息.
我正在使用我过去成功使用的简化版代码(简化因为我不需要发件人知道发送已成功)我已经将收到的发送归结为一对示例应用程序,实质上如下 发送 procedure TMF.SendString; var copyDataStruct: TCopyDataStruct; s: AnsiString; begin s := ebFirm.Text; copyDataStruct.cbData := 1 + length(s); copyDataStruct.lpData := PAnsiChar(s); SendData(copyDataStruct); end; procedure TMF.SendData(copyDataStruct: TCopyDataStruct); var rh: THandle; res: integer; begin rh := FindWindow(PChar('TMF'),PChar('Get Phone')); if rh = 0 then begin // Launch the target application ShellExecute(Handle,'open',GetPhone,nil,SW_SHOWNORMAL); // Give time for the application to launch Sleep(3000); SendData(copyDataStruct); // RECURSION! end; SendMessage(rh,WM_COPYDATA,Integer(Handle),Integer(@copyDataStruct)); end; 接收申请 procedure TMF.WMCopyData(var Msg: TWMCopyData); var s : AnsiString; begin s := PAnsiChar(Msg.CopyDataStruct.lpData) ; jobstatus.Panels[1].Text := s; end; 工作测试应用程序与我添加代码的应用程序之间的主要区别在于目标应用程序中正在进行大量额外活动.特别是在启动时. 有关为什么WMCopyData程序似乎根本没有被解雇的任何建议? 干杯 担 解决方法
我认为这是一个好习惯
copyDataStruct.dwData := Handle; 在程序TMF.SendString; – 如果您没有自定义标识符,则放置源HWND值将有助于调试目标(您可以在另一侧检查此值,因此避免误解广播的WMCOPY_DATA,例如 – 是的,不应该,但我见过一些!). 和 procedure WMCopyData(var Msg : TWMCopyData); message WM_COPYDATA; 在TMF客户端类定义中,对吧? 应该有一个缺少的退出或者在嵌套的SendData调用之后: procedure TMF.SendData(copyDataStruct: TCopyDataStruct); (...) Sleep(3000); SendData(copyDataStruct); end else SendMessage(rh,NativeInt(Handle),NativeInt(@copyDataStruct)); end; 但这不会有太大变化. 检查rh:= FindWindow()返回的句柄:它是TMF客户端表单的句柄,还是Application.Handle? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |