我有一个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/