VB6:如何获取给出DDE响应的程序的句柄ID

时间:2012-12-11 07:16:13

标签: vb6 dde

我将DDE发送到不受我控制的程序。响应的程序有多个实例,所有实例都有相同的主题名称,链接等。所以我想知道哪个实例正在响应我的DDE请求。

我的代码是:

textBox1.LinkTopic = "MT4|BID"
textBox1.LinkItem = Combo1.Text
textBox1.LinkMode = 1
textBox1.LinkRequest

这是在每毫秒触发的Timer事件中,它运行良好。

问题是任何程序都可以给我DDE响应:(

所以,我想知道哪个程序给了我DDE响应。 是否有可能获得正在响应的dde程序的app id(句柄)?

1 个答案:

答案 0 :(得分:2)

服务器将在WM_DDE_ACK的wparam参数中发送窗口句柄。在调用旧的Windows过程之前,您可以使用自己的窗口过程subclass the your main window来缓存窗口句柄。

编辑:看起来VB创建了一个隐藏的DDEMLMom窗口,该窗口为每个对话托管DDEMLAnsiClient。您可以使用EnumWindows并将GetWindowThreadProcessId的结果与GetCurrentProcessId的结果进行比较,以在您自己的进程中查找顶级窗口,然后按类名筛选以查找DDEMLMom窗口。获得DDEMLMom窗口后,通过EnumChildWindows找到DDEMLAnsiClient。

您可以通过SetForegroundWindow实现“切换到”功能,以帮助用户识别源应用程序。