我有一个DDE客户端应用程序,该应用程序通过使用SendMessage() WINAPI连接到DDE服务器应用程序。跟随SendMessage()调用,该调用在请求连接到DDE服务器时挂起。 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服务器窗口分配唯一的名称。

通过这样做,我相信在客户端,我可以从唯一名称(使用FindWindow() winapi)检索DDE服务器的窗口句柄,而不是使用SendMessage()进行广播,我可以使用窗口句柄直接将消息发送到DDE服务器。

如果您认为上述方法无法获得DDE服务器的窗口句柄,或者不建议您使用该方法,那么请告诉我其他方法,以便使用SendMessage() winapi连接到DDE Server。

最佳答案

使用SendMessageTimeout而不是SendMessage,这样挂起的应用程序不会将您挂起。

关于c++ - 当用于连接到DDE服务器时,SendMessage()WINAPI会挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7111753/

10-12 20:40