Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Conforme observado no tópico Recuperando as categorias funcionais suportadas por um dispositivo, os dispositivos portáteis do Windows podem oferecer suporte a uma ou mais categorias funcionais. Qualquer categoria funcional pode suportar um ou mais objetos funcionais. Por exemplo, a categoria de armazenamento pode suportar três objetos de armazenamento funcionais, cada um dos quais é identificado por uma cadeia de caracteres de identificador exclusivo. O primeiro objeto de armazenamento pode então ser identificado pela string "Storage1", o segundo pela string "Storage2" e o terceiro pela string "Storage3".
A função ListFunctionalObjects no módulo DeviceCapabilities.cpp demonstra a recuperação de tipos de conteúdo para as categorias funcionais suportadas por um dispositivo selecionado.
Seu aplicativo pode recuperar as categorias funcionais suportadas por um dispositivo usando as interfaces descritas na tabela a seguir.
| Interface | Descrição |
|---|---|
| Interface IPortableDeviceCapabilities | Fornece acesso aos métodos de obtenção de categoria funcional. |
| Interface IPortableDevicePropVariantCollection | Usado para enumerar e armazenar dados de categoria funcional. |
O código encontrado na função ListFunctionalObjects é quase idêntico ao código encontrado na função ListFunctionalCategories. (Consulte o tópico Recuperando categorias funcionais suportadas por um dispositivo.) A única diferença é a chamada para o IPortableDeviceCapabilities::GetFunctionalObjects método, que aparece dentro do loop que itera através das 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 get the list of
// functional object identifiers associated with a particular
// category.
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 object identifiers for all
// functional objects within this category
CComPtr<IPortableDevicePropVariantCollection> pFunctionalObjectIds;
hr = pCapabilities->GetFunctionalObjects(*pv.puuid, &pFunctionalObjectIds);
if (SUCCEEDED(hr))
{
printf("Functional Objects: ");
DisplayFunctionalObjectIDs(pFunctionalObjectIds);
printf("\n\n");
}
else
{
printf("! Failed to get functional objects, hr = 0x%lx\n", hr);
}
}
else
{
printf("! Invalid functional category found\n");
}
}
PropVariantClear(&pv);
}
}
Tópicos relacionados