デバイスでサポートされている機能カテゴリの取得
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);
}
}
関連トピック