我将DDE发送到不受我控制的程序。响应的程序有多个实例,所有实例都有相同的主题名称,链接等。所以我想知道哪个实例正在响应我的DDE请求。
我的代码是:
textBox1.LinkTopic = "MT4|BID"
textBox1.LinkItem = Combo1.Text
textBox1.LinkMode = 1
textBox1.LinkRequest
这是在每毫秒触发的Timer事件中,它运行良好。
问题是任何程序都可以给我DDE响应:(
所以,我想知道哪个程序给了我DDE响应。 是否有可能获得正在响应的dde程序的app id(句柄)?
答案 0 :(得分:2)
服务器将在WM_DDE_ACK的wparam参数中发送窗口句柄。在调用旧的Windows过程之前,您可以使用自己的窗口过程subclass the your main window来缓存窗口句柄。
编辑:看起来VB创建了一个隐藏的DDEMLMom窗口,该窗口为每个对话托管DDEMLAnsiClient。您可以使用EnumWindows并将GetWindowThreadProcessId的结果与GetCurrentProcessId的结果进行比较,以在您自己的进程中查找顶级窗口,然后按类名筛选以查找DDEMLMom窗口。获得DDEMLMom窗口后,通过EnumChildWindows找到DDEMLAnsiClient。
您可以通过SetForegroundWindow实现“切换到”功能,以帮助用户识别源应用程序。