Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB6:如何获取给出DDE响应的程序的句柄ID_Vb6_Dde - Fatal编程技术网

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

VB6:如何获取给出DDE响应的程序的句柄ID,vb6,dde,Vb6,Dde,我正在将DDE发送到我无法控制的程序。响应的程序有多个实例,所有实例都有相同的主题名、链接等。因此,我想知道哪个实例响应我的DDE请求 我的代码是: textBox1.LinkTopic = "MT4|BID" textBox1.LinkItem = Combo1.Text textBox1.LinkMode = 1 textBox1.LinkRequest 这是一个每毫秒触发一次的计时器事件,它工作得非常好 问题是任何程序都可以给我DDE响应:( 所以,我想知道哪个程序给了我DDE响应。 是

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

我的代码是:

textBox1.LinkTopic = "MT4|BID"
textBox1.LinkItem = Combo1.Text
textBox1.LinkMode = 1
textBox1.LinkRequest
这是一个每毫秒触发一次的计时器事件,它工作得非常好

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

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

服务器将在的wparam参数中发送窗口句柄。在调用旧的windows过程之前,您可以使用自己的窗口过程缓存窗口句柄

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


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

为什么?您想做什么?通常在dde中,您知道哪个程序将响应,因为您指定了链接主题,并且您可能检查了其他一些程序X的文档,您知道它将响应该主题。嗯,响应的程序有多个实例s、 所有实例都有相同的主题名、链接等,并且程序不在我的控制之下。所以我想知道哪个实例响应我的DDE请求,好吧,我明白了。那么这是一个好问题!…我恐怕不知道答案!+1对于这个问题。我将编辑你问题的开头,以包括你写的内容在那条评论中,希望没问题。还有一个问题。你想要什么类型的句柄?进程句柄?Windows句柄?你打算用这个句柄做什么?任何句柄,只要我能区分不同的InstanceSubclass代码:OldWindowProc=SetWindowLong(u Me.hwnd,GWL_WNDPROC,u NewWindowProc的地址)我收到SET_TEXT和get_TEXT messages,但在对主窗体或textboxDDE消息进行子类化后,我没有收到任何DDE消息。DDE消息发送到顶部窗口,而不是文本框。尝试对主窗口进行子类化。是的,我对顶部窗口进行了子类化,请查看我在上一条注释中粘贴的代码