我有一個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是可怕的順便說一句。 –