1

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

我的代码是:

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

这是在每毫秒触发的 Timer 事件中,它工作得很好。

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

所以,我想知道哪个程序给了我 DDE 响应。是否有可能获取响应的 dde ​​程序的应用程序 ID(句柄)?

4

1 回答 1

2

服务器将在WM_DDE_ACK的 wparam 参数中发送窗口句柄。您可以使用自己的窗口过程对主窗口进行子类化,以在调用旧的窗口过程之前缓存窗口句柄。

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

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

于 2012-12-21T00:39:21.833 回答