IMFAudioPolicy
COM公式ドキュメント
ストリーミングオーディオレンダラー (SAR) に関連付けられたオーディオセッションを構成します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
オーディオセッションをセッションのグループに割り当てます。
| rguidClass | GUID* | in | セッショングループを識別する GUID です。グループはアプリケーションによって定義されます。新しいセッショングループを作成するには、新しい GUID を割り当てます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 |
解説(Remarks)
2 つ以上のオーディオセッションが同じグループを共有する場合、Windows の音量コントロールはグループ全体に対して 1 つのスライダーコントロールを表示します。それ以外の場合は、セッションごとにスライダーを表示します。詳細については、コアオーディオ API ドキュメントの IAudioSessionControl::SetGroupingParam を参照してください。
このオーディオセッションが属するセッションのグループを取得します。
| pguidClass | GUID* | out | セッショングループを識別する GUID を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 |
解説(Remarks)
2 つ以上のオーディオセッションが同じグループを共有する場合、Windows の音量コントロールはグループ全体に対して 1 つのスライダーコントロールを表示します。それ以外の場合は、セッションごとにスライダーを表示します。詳細については、コアオーディオ API ドキュメントの IAudioSessionControl::SetGroupingParam を参照してください。
オーディオセッションの表示名を設定します。Windows の音量コントロールはこの名前を表示します。
| pszName | LPWSTR | in | 表示名を格納する、null 終端のワイド文字列です。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 |
解説(Remarks)
アプリケーションが表示名を設定しない場合、Windows が表示名を作成します。
オーディオセッションの表示名を取得します。Windows の音量コントロールはこの名前を表示します。
| pszName | LPWSTR* | out | 表示名文字列へのポインターを受け取ります。呼び出し元は、CoTaskMemFree を呼び出して、この文字列に割り当てられたメモリを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 |
解説(Remarks)
アプリケーションが表示名を設定しない場合、Windows が表示名を作成します。
オーディオセッションのアイコンリソースを設定します。Windows の音量コントロールはこのアイコンを表示します。
| pszPath | LPWSTR | in | アイコンを指定するワイド文字列です。「解説」を参照してください。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
アイコンパスの形式は "path,index" または "path,-id" です。ここで、path は DLL、実行可能ファイル、またはアイコンファイルへの完全修飾パス、index はファイル内のアイコンの 0 から始まるインデックス、id はリソース識別子です。リソース識別子は、インデックスと区別するためにマイナス記号 (-) が前に付くことに注意してください。パスには "%windir%" などの環境変数を含めることができます。詳細については、Windows SDK の IAudioSessionControl::SetIconPath を参照してください。
例
次の例では、アプリケーションの実行可能ファイル内のアイコンに対して、リソース識別子を使用してアイコンを設定します。
HRESULT SetIcon(IMFMediaSession *pSession, int nID)
{
IMFAudioPolicy *pPolicy = NULL;
const DWORD CCH_ICON_PATH = MAX_PATH + 16;
WCHAR szFileName[MAX_PATH];
WCHAR szIconPath[CCH_ICON_PATH];
HRESULT hr = S_OK;
DWORD result = GetModuleFileNameW(NULL, szFileName, MAX_PATH);
// Note: GetModuleFileName can return a truncated string without a
// NULL terminator. If so, the function succeeds but sets the last
// error to ERROR_INSUFFICIENT_BUFFER.
if ((result == 0) || (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
{
hr = E_FAIL;
goto done;
}
hr = StringCchPrintfW(szIconPath, CCH_ICON_PATH,
L"%s,-%d", szFileName, nID);
if (FAILED(hr))
{
goto done;
}
hr = MFGetService(
pSession,
MR_AUDIO_POLICY_SERVICE,
IID_PPV_ARGS(&pPolicy)
);
if (FAILED(hr))
{
goto done;
}
hr = pPolicy->SetIconPath(szIconPath);
if (FAILED(hr))
{
goto done;
}
done:
SafeRelease(&pPolicy);
return hr;
}
オーディオセッションのアイコンリソースを取得します。Windows の音量コントロールはこのアイコンを表示します。
| pszPath | LPWSTR* | out | シェルリソースを指定するワイド文字列へのポインターを受け取ります。文字列の形式については、IMFAudioPolicy::SetIconPath のトピックで説明されています。呼び出し元は、CoTaskMemFree を呼び出して、この文字列に割り当てられたメモリを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 |
解説(Remarks)
アプリケーションがアイコンパスを設定しなかった場合、このメソッドは空の文字列 ("") を返します。
詳細については、コアオーディオ API ドキュメントの IAudioSessionControl::GetIconPath を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFAudioPolicy "{A0638C2B-6465-4395-9AE7-A321A9FD2856}" #usecom global IMFAudioPolicy IID_IMFAudioPolicy "{}" #comfunc global IMFAudioPolicy_SetGroupingParam 3 var #comfunc global IMFAudioPolicy_GetGroupingParam 4 var #comfunc global IMFAudioPolicy_SetDisplayName 5 wstr #comfunc global IMFAudioPolicy_GetDisplayName 6 var #comfunc global IMFAudioPolicy_SetIconPath 7 wstr #comfunc global IMFAudioPolicy_GetIconPath 8 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFAudioPolicy "{A0638C2B-6465-4395-9AE7-A321A9FD2856}" #usecom global IMFAudioPolicy IID_IMFAudioPolicy "{}" #comfunc global IMFAudioPolicy_SetGroupingParam 3 sptr #comfunc global IMFAudioPolicy_GetGroupingParam 4 sptr #comfunc global IMFAudioPolicy_SetDisplayName 5 wstr #comfunc global IMFAudioPolicy_GetDisplayName 6 sptr #comfunc global IMFAudioPolicy_SetIconPath 7 wstr #comfunc global IMFAudioPolicy_GetIconPath 8 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。