6

DirectSound API を使用してオーディオ データをレンダリングするコンソール プログラムを作成しています。DirectSound プログラミング ガイド (Microsoft から)に従っているときに、興味深い問題に遭遇しました。ドキュメントによると:

デバイス オブジェクトを作成したら、IDirectSound8::SetCooperativeLevelメソッドを使用してデバイスの協調レベルを設定する必要があります。そうしないと音が出ません。

問題は、私がコンソール プログラムを作成していSetCooperativeLevelて、最初の引数として HWND が必要なことです。コンソール プログラムで処理する HWND がありません。null ポインターを提供しようとしましたが、DSERR_INVALIDPARAMエラー コードで失敗しました。

IDirectSound8::SetCooperativeLevelコンソール プログラムでどの HWND 値を指定する必要がありますか? プログラムのオーディオ部分は共有ライブラリとして構築される予定であるため、「外部」プログラムに関する知識はほとんどまたはまったくありません。

アドバイスをありがとう!

注 : SDL、OpenAL、SFML (OpenAL ベース) を使用するなど、単純にオーディオをレンダリングするためのより良いソリューションがあることは知っていますが、現在のプロジェクトでは DirectSound が適用されています。


編集: GLOBAL_FOCUS バッファを作成するときに、デスクトップ ウィンドウまたはコンソール ウィンドウを HWND として使用することについての疑問を解消する Microsoft エンジニアからのメッセージを見つけました。SetCooperativeLevel

4

2 に答える 2

3

SetCooperativeLevel私はこれを自分でテストしていませんが、隠しウィンドウを作成してその HWND をメソッドに渡すことに成功するかもしれません。SetCooperativeLevelこの hwnd を使用して、アプリケーションがいつ入力フォーカスを持っているかを判断します。したがって、入力フォーカスが問題にならない協調レベル (例: DSSCL_NORMAL) を選択した場合は、非表示のウィンドウ (入力フォーカスを受け取らない) で問題ありません。

于 2011-07-15T23:35:22.553 に答える
2

これを使用できます::GetDesktopWindow()

于 2012-08-23T07:57:32.247 に答える