我正在使用我过去成功使用的简化版代码(简化因为我不需要发件人知道发送已成功)我已经将收到的发送归结为一对示例应用程序,实质上如下
发送
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?
总结以上是内存溢出为你收集整理的delphi – WM_COPYDATA字符串未出现在目标应用程序中全部内容,希望文章能够帮你解决delphi – WM_COPYDATA字符串未出现在目标应用程序中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)