Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IMFAudioPolicy

IMFAudioPolicy

COM
IIDa0638c2b-6465-4395-9ae7-a321a9fd2856継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ストリーミングオーディオレンダラー (SAR) に関連付けられたオーディオセッションを構成します。

メソッド 6

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetGroupingParam(GUID* rguidClass)

オーディオセッションをセッションのグループに割り当てます。

rguidClassGUID*inセッショングループを識別する GUID です。グループはアプリケーションによって定義されます。新しいセッショングループを作成するには、新しい GUID を割り当てます。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。

解説(Remarks)

2 つ以上のオーディオセッションが同じグループを共有する場合、Windows の音量コントロールはグループ全体に対して 1 つのスライダーコントロールを表示します。それ以外の場合は、セッションごとにスライダーを表示します。詳細については、コアオーディオ API ドキュメントの IAudioSessionControl::SetGroupingParam を参照してください。

vtbl 4 HRESULT GetGroupingParam(GUID* pguidClass)

このオーディオセッションが属するセッションのグループを取得します。

pguidClassGUID*outセッショングループを識別する GUID を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。

解説(Remarks)

2 つ以上のオーディオセッションが同じグループを共有する場合、Windows の音量コントロールはグループ全体に対して 1 つのスライダーコントロールを表示します。それ以外の場合は、セッションごとにスライダーを表示します。詳細については、コアオーディオ API ドキュメントの IAudioSessionControl::SetGroupingParam を参照してください。

vtbl 5 HRESULT SetDisplayName(LPWSTR pszName)

オーディオセッションの表示名を設定します。Windows の音量コントロールはこの名前を表示します。

pszNameLPWSTRin表示名を格納する、null 終端のワイド文字列です。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。

解説(Remarks)

アプリケーションが表示名を設定しない場合、Windows が表示名を作成します。

vtbl 6 HRESULT GetDisplayName(LPWSTR* pszName)

オーディオセッションの表示名を取得します。Windows の音量コントロールはこの名前を表示します。

pszNameLPWSTR*out表示名文字列へのポインターを受け取ります。呼び出し元は、CoTaskMemFree を呼び出して、この文字列に割り当てられたメモリを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。

解説(Remarks)

アプリケーションが表示名を設定しない場合、Windows が表示名を作成します。

vtbl 7 HRESULT SetIconPath(LPWSTR pszPath)

オーディオセッションのアイコンリソースを設定します。Windows の音量コントロールはこのアイコンを表示します。

pszPathLPWSTRinアイコンを指定するワイド文字列です。「解説」を参照してください。

戻り値

このメソッドが成功した場合は 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;
}
vtbl 8 HRESULT GetIconPath(LPWSTR* pszPath)

オーディオセッションのアイコンリソースを取得します。Windows の音量コントロールはこのアイコンを表示します。

pszPathLPWSTR*outシェルリソースを指定するワイド文字列へのポインターを受け取ります。文字列の形式については、IMFAudioPolicy::SetIconPath のトピックで説明されています。呼び出し元は、CoTaskMemFree を呼び出して、この文字列に割り当てられたメモリを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。

解説(Remarks)

アプリケーションがアイコンパスを設定しなかった場合、このメソッドは空の文字列 ("") を返します。

詳細については、コアオーディオ API ドキュメントの IAudioSessionControl::GetIconPath を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 方式にも切替可。