Получение функциональных категорий, поддерживаемых устройством
Windows переносимые устройства могут поддерживать одну или несколько функциональных категорий. Эти категории описаны в следующей таблице.
Категория | Описание |
---|---|
Звукозапись | Устройство можно использовать для записи звука. |
Сведения о отрисовке | Устройство предоставляет данные, описывающие файлы мультимедиа, которые он может отрисовки. |
Служба коротких сообщений (SMS) | Устройство поддерживает текстовые сообщения. |
По-прежнему захват изображения | Устройство можно использовать для захвата по-прежнему изображений. |
Память | Устройство можно использовать для хранения файлов. |
Функция ListFunctionalCategories в модуле DeviceCapabilities.cpp демонстрирует получение функциональных категорий для выбранного устройства.
Приложение может получить функциональные категории, поддерживаемые устройством, с помощью интерфейсов, описанных в следующей таблице.
Интерфейс | Описание |
---|---|
Интерфейс IPortableDeviceCapabilities | Предоставляет доступ к методам извлечения функциональной категории. |
Интерфейс IPortableDevicePropVariantCollection | Используется для перечисления и хранения данных функциональной категории. |
Первая задача, выполняемая примером приложения, — получение объекта IPortableDeviceCapabilities , который используется для получения функциональных категорий на выбранном устройстве.
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);
}
}
Извлеченные категории хранятся в объекте IPortableDevicePropVariantCollection .
Следующим шагом является перечисление и отображение поддерживаемых категорий. Первым шагом, который выполняет пример приложения, является получение количества поддерживаемых категорий. Затем он использует это число для итерации через объект IPortableDevicePropVariantCollection , содержащий поддерживаемые категории.
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);
}
}
Связанные темы