Compartilhar via


Recuperando as categorias funcionais compatíveis com um dispositivo

Os Dispositivos Portáteis do Windows podem dar suporte a uma ou mais categorias funcionais. Essas categorias são descritas na tabela a seguir.

Categoria Descrição
Captura de áudio O dispositivo pode ser usado para gravar áudio.
Informações de renderização O dispositivo fornece dados que descrevem os arquivos de mídia que ele é capaz de renderizar.
SMS (serviço de mensagem curta) O dispositivo dá suporte a mensagens de texto.
Captura de imagem ainda O dispositivo pode ser usado para capturar imagens ainda.
Armazenamento O dispositivo pode ser usado para armazenar arquivos.

 

A função ListFunctionalCategories no módulo DeviceCapabilities.cpp demonstra a recuperação de categorias funcionais para 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.

 

A primeira tarefa realizada pelo aplicativo de exemplo é a recuperação de um objeto IPortableDeviceCapabilities , que é usado para recuperar as categorias funcionais no dispositivo selecionado.

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

As categorias recuperadas são armazenadas em um objeto IPortableDevicePropVariantCollection .

A próxima etapa é a enumeração e a exibição das categorias com suporte. A primeira etapa que o aplicativo de exemplo realiza é recuperar a contagem de categorias com suporte. Em seguida, ele usa essa contagem para iterar por meio do objeto IPortableDevicePropVariantCollection que contém as categorias com suporte.

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

Guia de programação