如何从Visual Basic应用程序发送一个短字符串到Delphi应用程序?
问题描述:
我需要从一个VB应用程序发送一个短字符串(小于30字节,但每秒发送一次)到一个Delphi应用程序..这是可能的,使用Windows中的CopyDataStruct,WM_COPYDATA和SendMessage函数?如何从Visual Basic应用程序发送一个短字符串到Delphi应用程序?
答
我会说WM_COPYDATA是完成此操作的最佳方式。你只需要得到你的Delphi主窗体,比如说为WM_COPYDATA实现一个消息处理程序。
在德尔福最终它看起来是这样的:
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主窗体的窗口句柄。
答
这听起来像你会使用DDE来完成的。另一种方法是将字符串写入注册表中的临时区域,然后调用其他程序来读取它并在完成后删除临时注册表项。您也可以在命令行中将该字符串作为参数传递,然后执行该程序。
你好,谢谢你的帮助..我需要问如何获得接收程序的句柄..在VB中,我可以使用Me.Handle作为发送应用程序,但似乎无论我输入为接收器句柄,我将不会得到任何结果.. hwnd给出一个很长的数字,例如4759178910518738944,每次发送命令时都会改变。也尝试手动进入Delphi窗口处理VB ..接收器PID我通过使用“pid = Shell(C:\ Receive.exe,vbNormalFocus)“..我试图VB到Delphi时没有结果,但VB到VB是好的,德尔福到Delphi也OK ..我做错了什么? :-) – Fred 2011-04-05 11:49:45
调用FindWindowEx传递Delphi窗口标题和窗口类的名称。你可以从Spy ++中找到它。或者调用EnumWindows枚举顶层窗口 - 你的将是其中之一。 – 2011-04-05 12:06:35
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代码..我有一个Delphi程序,它发送一个CopyDataStruct “接收”程序,这是工作正常,但使用VB发送相同的字符串是不成功的,目前为止..任何具体的我需要做的? – Fred 2011-04-05 12:13:22