2011-04-05 57 views

回答

3

我会说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主窗体的窗口句柄。

+0

你好,谢谢你的帮助..我需要问如何获得接收程序的句柄..在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

+0

调用FindWindowEx传递Delphi窗口标题和窗口类的名称。你可以从Spy ++中找到它。或者调用EnumWindows枚举顶层窗口 - 你的将是其中之一。 – 2011-04-05 12:06:35

+0

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

0

这听起来像你会使用DDE来完成的。另一种方法是将字符串写入注册表中的临时区域,然后调用其他程序来读取它并在完成后删除临时注册表项。您也可以在命令行中将该字符串作为参数传递,然后执行该程序。

相关问题