如何将短字符串从 Visual Basic 应用程序发送到 Delphi 应用程序?
Posted
技术标签:
【中文标题】如何将短字符串从 Visual Basic 应用程序发送到 Delphi 应用程序?【英文标题】:How to send a short string from a Visual Basic application to a Delphi application? 【发布时间】:2011-04-05 10:01:33 【问题描述】:我需要从一个 VB 应用程序向 Delphi 应用程序发送一个短字符串(小于 30 个字节,但每秒发送一次)。这可能吗,在 Windows 中使用 CopyDataStruct、WM_COPYDATA 和 SendMessage 函数?
【问题讨论】:
【参考方案1】:我会说 WM_COPYDATA 是执行此操作的完美方式。你只需要得到你的 Delphi 主窗体,例如,为 WM_COPYDATA 实现一个消息处理程序。
在 Delphi 端,它看起来像这样:
TMyMainForm = class(TForm)
protected
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
end;
procedure TMyMainForm.WMCopyData(var Msg: TWMCopyData);
begin
//do something with Msg.lpData
end;
您的 VB 代码需要获取 Delphi 主窗体的窗口句柄。
【讨论】:
您好,感谢您的帮助.. 我需要询问如何获取接收程序的句柄.. 在 VB 中我可以将 Me.Handle 用于发送应用程序,但似乎无论我输入什么作为接收器句柄,我不会得到任何结果.. hwnd 给出了一个长数字,例如 4759178910518738944,每次发送命令时都会更改.. 还尝试将 Delphi 窗口句柄手动输入到 VB.. 接收器 PID i通过使用“pid = Shell(C:\ Receive.exe,vbNormalFocus)”来获取..尝试VB到Delphi时没有结果,但是VB到VB是可以的,Delphi到Delphi也可以..我在做什么错误的? :-) 调用 FindWindowEx 传递 Delphi 窗口标题和窗口类名。您可以从 Spy++ 中找到这一点。或者调用 EnumWindows 来枚举顶层窗口——你的就是其中之一。 Dim iHwnd As Long Dim SS As String = "Test String less than 30 Char" Dim ls As Integer = Len(SS) Dim cds As CopyDataStruct = New CopyDataStruct With .dwData = 0, .cbData = ls, .lpData = SS iHwnd = FindWindow(0&, "Receive") SendMessage(iHwnd, &H4A, Me.Handle, cds) 这是我使用的一些 VB 代码。我有一个发送 CopyDataStruct 的 Delphi 程序到“接收”程序,它工作正常,但到目前为止使用 VB 发送相同的字符串并不成功。我需要做什么具体的事情? 这听起来像是一个不同的问题。在 cmets 中很难回答。问一个新问题。【参考方案2】:这听起来像是您将使用 DDE 来完成的事情。另一种方法是将字符串写入注册表中的临时区域,然后调用其他程序读取它并在完成后删除临时注册表项。您也可以在命令行中将字符串作为参数传递,然后执行程序。
【讨论】:
以上是关于如何将短字符串从 Visual Basic 应用程序发送到 Delphi 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
辉煌不再!Microsoft计划结束Visual Basic编程语言