Mengambil Kategori Fungsi yang Didukung oleh Perangkat

Perangkat Portabel Windows mungkin mendukung satu atau beberapa kategori fungsi. Kategori ini dijelaskan dalam tabel berikut.

Kategori Deskripsi
Pengambilan audio Perangkat dapat digunakan untuk merekam audio.
Informasi penyajian Perangkat menyediakan data yang menjelaskan file media yang mampu dirender.
Layanan pesan singkat (SMS) Perangkat mendukung pesan teks.
Pengambilan gambar diam Perangkat dapat digunakan untuk mengambil gambar diam.
Penyimpanan Perangkat dapat digunakan untuk menyimpan file.

 

Fungsi ListFunctionalCategories dalam modul DeviceCapabilities.cpp menunjukkan pengambilan kategori fungsional untuk perangkat yang dipilih.

Aplikasi Anda dapat mengambil kategori fungsi yang didukung oleh perangkat dengan menggunakan antarmuka yang dijelaskan dalam tabel berikut.

Antarmuka Deskripsi
Antarmuka IPortableDeviceCapabilities Menyediakan akses ke metode pengambilan kategori fungsi.
Antarmuka IPortableDevicePropVariantCollection Digunakan untuk menghitung dan menyimpan data kategori fungsional.

 

Tugas pertama yang dicapai oleh aplikasi sampel adalah pengambilan objek IPortableDeviceCapabilities , yang digunakan untuk mengambil kategori fungsional pada perangkat yang dipilih.

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);
    }
}

Kategori yang diambil disimpan dalam objek IPortableDevicePropVariantCollection .

Langkah selanjutnya adalah enumerasi dan tampilan kategori yang didukung. Langkah pertama yang dicapai aplikasi sampel adalah mengambil jumlah kategori yang didukung. Kemudian menggunakan jumlah ini untuk melakukan iterasi melalui objek IPortableDevicePropVariantCollection yang berisi kategori yang didukung.

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);
    }
}

Antarmuka IPortableDevice

Antarmuka IPortableDeviceCapabilities

Antarmuka IPortableDevicePropVariantCollection

Panduan Pemrograman