Compartilhar via


Recuperando os tipos de conteúdo compatíveis com um dispositivo

Conforme observado no tópico Recuperando as categorias funcionais compatíveis com um dispositivo , os Dispositivos Portáteis do Windows podem dar suporte a uma ou mais categorias funcionais. Qualquer categoria funcional específica pode dar suporte a um ou mais tipos de conteúdo. Por exemplo, a categoria de armazenamento pode dar suporte a tipos de conteúdo de pasta, áudio e imagem.

Para obter uma descrição dos tipos de conteúdo compatíveis com o WPD, consulte o tópico WPD_CONTENT_TYPE_ALL .

A função ListSupportedContentTypes no módulo DeviceCapabilities.cpp demonstra a recuperação de tipos de conteúdo para as categorias funcionais compatíveis com um dispositivo selecionado.

Seu aplicativo pode recuperar as categorias funcionais compatíveis com um dispositivo usando as interfaces descritas na tabela a seguir.

Interface Descrição
IPortableDeviceCapabilities Interface Fornece acesso aos métodos de recuperação de categoria funcional.
IPortableDevicePropVariantCollection Interface Usado para enumerar e armazenar dados de categoria funcional.

 

O código encontrado na função ListSupportedContentTypes é quase idêntico ao código encontrado na função ListFunctionalCategories. (Consulte o tópico Recuperando categorias funcionais compatíveis com um dispositivo .) A única diferença é a chamada para o método IPortableDeviceCapabilities::GetSupportedContentTypes , que aparece dentro do loop que itera pelas categorias funcionais.

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 Interface

IPortableDeviceCapabilities Interface

IPortableDevicePropVariantCollection Interface

Guia de programação