【发布时间】:2011-08-18 17:44:21
【问题描述】:
我有一个 DDE 客户端应用程序,它使用 SendMessage() WINAPI 连接到 DDE 服务器应用程序。在请求连接到 DDE 服务器时挂起的 SendMessage() 调用之后。 DDE 客户端应用程序和服务器应用程序都在 VC++ 中。
SendMessage((HWND) -1,WM_DDE_INITIATE,(WPARAM) m_hWnd,MAKELPARAM(hService,hTopic));
现在SendMessage() 正在做什么让它被绞死?基本上它是向系统中的所有窗口广播WM_DDE_INITIATE 窗口消息。它所针对的窗口(DDE 服务器)应处理该消息并应以确认回复。收到确认后,SendMessage() 调用完成并连接客户端。
在我们的例子中,它挂起并且永远不会返回,因此我们的 DDE 客户端应用程序挂起。
我在网上搜索发现使用SendMessage()进行广播通常不推荐,因为它会挂很多次。
我有 DDE 客户端应用程序和 DDE 服务器应用程序的代码。
让我知道有什么方法可以检索 DDE 服务器窗口句柄,或者有什么方法可以为 DDE 服务器窗口分配一个唯一的名称。
通过这样做,我相信在客户端我可以从唯一名称检索 DDE 服务器的窗口句柄(使用 FindWindow()winapi),而不是使用 SendMessage() 广播,我可以使用直接将消息发送到 DDE 服务器窗口句柄。
如果您觉得上述获取DDE服务器窗口句柄的方法不可行或不推荐,那么请告诉我其他使用SendMessage()winapi连接DDE服务器的方法。
【问题讨论】:
-
使用 EnumWindows 而不是 FindWindow,这样您就有更好的机会识别正确的窗口。使用 Spy++ 查看窗口属性,类名往往有利于过滤。获取类名()。顺便说一句,DDE 太可怕了。
标签: c++ windows winapi visual-c++ dde