Share via


Recuperar las categorías funcionales compatibles con un dispositivo

Los dispositivos portátiles de Windows pueden admitir una o varias categorías funcionales. Estas categorías se describen en la tabla siguiente.

Category Descripción
Captura de audio El dispositivo se puede usar para grabar audio.
Información de representación El dispositivo proporciona datos que describen los archivos multimedia que es capaz de representar.
Servicio de mensajes cortos (SMS) El dispositivo admite la mensajería de texto.
Captura de imágenes fijas El dispositivo se puede usar para capturar imágenes fijas.
Storage El dispositivo se puede usar para almacenar archivos.

 

La función ListFunctionalCategories del módulo DeviceCapabilities.cpp muestra la recuperación de categorías funcionales para un dispositivo seleccionado.

La aplicación puede recuperar las categorías funcionales compatibles con un dispositivo mediante las interfaces descritas en la tabla siguiente.

Interfaz Descripción
IPortableDeviceCapabilities (Interfaz) Proporciona acceso a los métodos de recuperación de categorías funcionales.
IPortableDevicePropVariantCollection (Interfaz) Se usa para enumerar y almacenar datos de categoría funcional.

 

La primera tarea realizada por la aplicación de ejemplo es la recuperación de un objeto IPortableDeviceCapabilities , que se usa para recuperar las categorías funcionales en el dispositivo seleccionado.

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

Las categorías recuperadas se almacenan en un objeto IPortableDevicePropVariantCollection .

El siguiente paso es la enumeración y presentación de las categorías admitidas. El primer paso que realiza la aplicación de ejemplo es recuperar el recuento de categorías admitidas. A continuación, usa este recuento para recorrer en iteración el objeto IPortableDevicePropVariantCollection que contiene las categorías admitidas.

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 (interfaz)

IPortableDeviceCapabilities (Interfaz)

IPortableDevicePropVariantCollection (Interfaz)

Guía de programación