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);
}
}
Tópicos relacionados