2011-01-22 5 views
4

Direct Soundを使用してサウンドを再生するDLLがあります。サウンドを再生するには、実行可能ファイルのHWNDが必要です。 DLLをロードする実行可能ファイルのHWNDがありません。実行可能ファイルからDLLを渡すことなく、DLLの中でどのように取得するのですか?DLL内部からHWNDを取得するにはどうすればよいですか?

+0

実行可能ファイルの 'HWND'? "HWND"は "Handle to Window"の略です...あなたは 'HMODULE'を意味しましたか? – Mehrdad

+0

@Mehrdad:彼はプロセスの中でウィンドウのHWNDが必要だと思う... Direct Soundは初期化のためにHWNDが必要です。 –

+0

@Reed:ああ、そうだよ。 – Mehrdad

答えて

4

GetCurrentProcessIdを使用して、現在のプロセスIDを取得できます。

EnumWindowsを呼び出し、各ウィンドウをGetWindowThreadProcessIdでチェックして、プロセスに関連するウィンドウを見つけることができます。

しかし、簡単なオプションは、独自のウィンドウを生成するだけかもしれません。表示されない1x1ピクセルウィンドウを作成し、Direct Soundで使用することができます。

これは、呼び出し元プロセスが使用可能なウィンドウを持たない場合(またはウィンドウハンドルを定期的に削除する場合)にも機能するという利点があります。

+0

私はあなたとshf301のような小さなウィンドウを作成しようとします。 – zooropa

+0

テストアプリケーションで小さなウィンドウを作成しました。 – zooropa

+0

ウィンドウを作成することはもちろん可能ですが、あなたの最初の選択は本当にすべきではありません。ウィンドウは多少の空腹感があり、独自のニーズがあり、一般的には独自のメッセージループ(暗黙的にまたは明示的に)小さなDLLのために考慮する必要があります。 DLL関数を介してHWND参照をDLLに渡すか、実行可能な制御可能なプロセスから検証可能なHWNDを取得するのが普通です。このプロセスはもちろん監視する必要があります。 – specializt

0

メインスレッドのGetGUIThreadInfoを呼び出します。これはあなたにHWNDの束をもたらします。最上位レベルのHWNDが必要な場合は、有効な値をすべて選択し(すべての値が入力されるわけではありません)、その上位レベルの祖先をGetAncestor(GA_ROOT)で探します。

関連する問題