Partager via


Récupération des catégories fonctionnelles prises en charge par un appareil

Les appareils portables Windows peuvent prendre en charge une ou plusieurs catégories fonctionnelles. Ces catégories sont décrites dans le tableau suivant.

Category Description
Capture audio L’appareil peut être utilisé pour enregistrer de l’audio.
Informations de rendu L’appareil fournit des données décrivant les fichiers multimédias qu’il est capable de rendre.
Service de messages courts (SMS) L’appareil prend en charge la messagerie texte.
Capture d’images fixes L’appareil peut être utilisé pour capturer des images fixes.
Stockage L’appareil peut être utilisé pour stocker des fichiers.

 

La fonction ListFunctionalCategories dans le module DeviceCapabilities.cpp illustre la récupération des catégories fonctionnelles pour un appareil sélectionné.

Votre application peut récupérer les catégories fonctionnelles prises en charge par un appareil à l’aide des interfaces décrites dans le tableau suivant.

Interface Description
IPortableDeviceCapabilities, interface Fournit l’accès aux méthodes de récupération des catégories fonctionnelles.
IPortableDevicePropVariantCollection, interface Utilisé pour énumérer et stocker des données de catégorie fonctionnelle.

 

La première tâche accomplie par l’exemple d’application est la récupération d’un objet IPortableDeviceCapabilities , qui est utilisé pour récupérer les catégories fonctionnelles sur l’appareil sélectionné.

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

Les catégories récupérées sont stockées dans un objet IPortableDevicePropVariantCollection .

L’étape suivante est l’énumération et l’affichage des catégories prises en charge. La première étape de l’exemple d’application consiste à récupérer le nombre de catégories prises en charge. Il utilise ensuite ce nombre pour itérer au sein de l’objet IPortableDevicePropVariantCollection qui contient les catégories prises en charge.

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, interface

IPortableDeviceCapabilities, interface

IPortableDevicePropVariantCollection, interface

Guide de programmation