c++ - SendMessage()WINAPIがDDEサーバーへの接続に使用されるとハングする

c++ windows winapi visual-c++ dde

SendMessage() WINAPIを使用してDDEサーバーアプリに接続する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サーバーに接続する他の方法を教えてください。
答え
SendMessageの代わりにSendMessageTimeoutを使用して、ハングしたアプリがハングしないようにします。
関連記事

c++ - 標準のレイアウトと継承

c# - C++クラスからのC#呼び出しメソッド

c++ - 配列のソートを維持しながら、配列に要素を挿入および削除する

c++ - Windowsネットワークマッピングのラベルの設定

c++ - C++からDelphiへの変換(単純)

c++ - アイテムを正しい方法で分類する

c++ - DirectX 9での.Xモデルの読み込み

c++ - OSX C++ Eclipseが頻繁にクラッシュします。どうすればよいですか?

c++ - アプリにVisual Studioエディターを埋め込む

c++ - Boost::uBLASベクトルでのSTL操作の実行