我有一个DDE客户端应用程序,它通过使用SendMessage()
WINAPI连接到DDE服务器应用程序。在请求连接到DDE服务器时挂起的SendMessage()
呼叫挂起。 DDE客户端应用程序和服务器应用程序都在VC++中。SendMessage()当用于连接到DDE服务器时,WINAPI获取挂起
SendMessage((HWND) -1,WM_DDE_INITIATE,(WPARAM) m_hWnd,MAKELPARAM(hService,hTopic));
现在SendMessage()
在做什么,它正在被绞死?基本上,它将广播WM_DDE_INITIATE
窗口消息到系统中的所有窗口。它所针对的窗口(DDE服务器)应处理该消息,并应回复确认。一旦收到确认,SendMessage()
呼叫完成并且客户端已连接。
在我们的案例中,它越来越多,并且永远不会返回,因此我们有DDE Client应用程序挂起。
我在网上搜索,发现使用SendMessage()
广播通常不建议,因为它挂起很多次。
我有我的DDE客户端应用程序和DDE服务器应用程序的代码。
让我知道是否有某种方式来检索DDE服务器窗口句柄或某种方式分配一个唯一的名称到DDE服务器窗口。
通过这样做,我相信在客户端,我可以检索唯一的名称DDE服务器的窗口句柄(使用FindWindow()
WINAPI)和而不是使用SendMessage()
广播我可以将消息直接使用窗口句柄发送到DDE服务器。
如果您觉得以上方法获取DDE服务器的窗口句柄是不可能的或不推荐的,那么请让我知道一些其他方法使用SendMessage()
winapi连接到DDE服务器。
使用EnumWindows而不是FindWindow,所以你将有更好的识别正确窗口的几率。使用Spy ++查看窗口属性,类名往往适合过滤。 GetClassName()。 DDE是可怕的顺便说一句。 –