次の方法で共有


デバイスでサポートされている機能カテゴリの取得

Windowsポータブル デバイスでは、1 つ以上の機能カテゴリがサポートされる場合があります。 これらのカテゴリについては、次の表で説明します。

カテゴリ 説明
オーディオ キャプチャ デバイスを使用してオーディオを録音できます。
レンダリング情報 デバイスは、レンダリング可能なメディア ファイルを記述するデータを提供します。
短いメッセージ サービス (携帯ショートメール) デバイスは、テキスト メッセージングをサポートしています。
静止画像キャプチャ デバイスを使用して、静止画像をキャプチャできます。
ストレージ デバイスを使用してファイルを格納できます。

 

DeviceCapabilities.cpp モジュールの List FunctionalCategories 関数は、選択したデバイスの機能カテゴリの取得を示しています。

アプリケーションは、次の表に示すインターフェイスを使用して、デバイスでサポートされている機能カテゴリを取得できます。

インターフェイス 説明
IPortableDeviceCapabilities インターフェイス 機能カテゴリ取得メソッドへのアクセスを提供します。
IPortableDevicePropVariantCollection インターフェイス 機能カテゴリ データを列挙して格納するために使用します。

 

サンプル アプリケーションによって実行される最初のタスクは、選択したデバイスの機能カテゴリを取得するために使用される IPortableDeviceCapabilities オブジェクトの取得です。

HRESULT hr = S_OK;
CComPtr<IPortableDeviceCapabilities>            pCapabilities;
CComPtr<IPortableDevicePropVariantCollection>   pCategories;
DWORD dwNumCategories = 0;

if (pDevice == NULL)
{
    printf("! A NULL IPortableDevice interface pointer was received\n");
    return;
}

// Get an IPortableDeviceCapabilities interface from the IPortableDevice interface to
// access the device capabilities-specific methods.
hr = pDevice->Capabilities(&pCapabilities);
if (FAILED(hr))
{
    printf("! Failed to get IPortableDeviceCapabilities from IPortableDevice, hr = 0x%lx\n",hr);
}

// Get all functional categories supported by the device.
if (SUCCEEDED(hr))
{
    hr = pCapabilities->GetFunctionalCategories(&pCategories);
    if (FAILED(hr))
    {
        printf("! Failed to get functional categories from the device, hr = 0x%lx\n",hr);
    }
}

取得したカテゴリは、 IPortableDevicePropVariantCollection オブジェクトに格納されます。

次の手順は、サポートされているカテゴリの列挙と表示です。 サンプル アプリケーションが実行する最初の手順は、サポートされているカテゴリの数を取得することです。 次に、このカウントを使用して、サポートされているカテゴリを含む IPortableDevicePropVariantCollection オブジェクトを反復処理します。

if (SUCCEEDED(hr))
{
    hr = pCategories->GetCount(&dwNumCategories);
    if (FAILED(hr))
    {
        printf("! Failed to get number of functional categories, hr = 0x%lx\n",hr);
    }
}

printf("\n%d Functional Categories Found on the device\n\n", dwNumCategories);

// Loop through each functional category and display its name
if (SUCCEEDED(hr))
{
    for (DWORD dwIndex = 0; dwIndex < dwNumCategories; dwIndex++)
    {
        PROPVARIANT pv = {0};
        PropVariantInit(&pv);
        hr = pCategories->GetAt(dwIndex, &pv);
        if (SUCCEEDED(hr))
        {
            // We have a functional category.  It is assumed that
            // functional categories are returned as VT_CLSID
            // VarTypes.

            if (pv.puuid != NULL)
            {
                // Display the functional category name
                DisplayFunctionalCategory(*pv.puuid);
                printf("\n");
            }
        }

        PropVariantClear(&pv);
    }
}

IPortableDevice インターフェイス

IPortableDeviceCapabilities インターフェイス

IPortableDevicePropVariantCollection インターフェイス

プログラミング ガイド