Share via


Recuperar los tipos de contenido admitidos por un dispositivo

Como se indicó en el tema Recuperación de las categorías funcionales compatibles con un dispositivo , los dispositivos portátiles de Windows pueden admitir una o varias categorías funcionales. Cualquier categoría funcional determinada puede admitir uno o varios tipos de contenido. Por ejemplo, la categoría de almacenamiento puede admitir tipos de contenido de carpeta, audio e imagen.

Para obtener una descripción de los tipos de contenido admitidos por WPD, consulte el tema WPD_CONTENT_TYPE_ALL .

La función ListSupportedContentTypes del módulo DeviceCapabilities.cpp muestra la recuperación de tipos de contenido para las categorías funcionales admitidas por 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.

 

El código encontrado en la función ListSupportedContentTypes es casi idéntico al código encontrado en la función ListFunctionalCategories. (Consulte el tema Recuperación de categorías funcionales compatibles con un dispositivo ). La única diferencia es la llamada al método IPortableDeviceCapabilities::GetSupportedContentTypes , que aparece dentro del bucle que recorre en iteración las categorías funcionales.

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.
// We will use these categories to enumerate functional objects
// that fall within them.
if (SUCCEEDED(hr))
{
    hr = pCapabilities->GetFunctionalCategories(&pCategories);
    if (FAILED(hr))
    {
        printf("! Failed to get functional categories from the device, hr = 0x%lx\n",hr);
    }
}

// Get the number of functional categories found on the device.
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 and supported content types.
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)      &&
                (pv.vt    == VT_CLSID))
            {
                // Display the functional category name
                printf("Functional Category: ");
                DisplayFunctionalCategory(*pv.puuid);
                printf("\n");

                // Display the content types supported for this category
                CComPtr<IPortableDevicePropVariantCollection> pContentTypes;
                hr = pCapabilities->GetSupportedContentTypes(*pv.puuid, &pContentTypes);
                if (SUCCEEDED(hr))
                {
                    printf("Supported Content Types: ");
                    DisplayContentTypes(pContentTypes);
                    printf("\n\n");
                }
                else
                {
                    printf("! Failed to get supported content types from the device, hr = 0x%lx\n",hr);
                }
            }
            else
            {
                printf("! Invalid functional category found\n");
            }
        }

        PropVariantClear(&pv);
    }
}

IPortableDevice (interfaz)

IPortableDeviceCapabilities (Interfaz)

IPortableDevicePropVariantCollection (Interfaz)

Guía de programación