检索设备支持的功能类别
Windows 便携设备可能支持一个或多个功能类别。 下表描述了这些类别。
类别 | 说明 |
---|---|
音频捕获 | 设备可用于录制音频。 |
呈现信息 | 设备提供描述它能够呈现的媒体文件的数据。 |
短信服务 (短信) | 设备支持短信。 |
静止图像捕获 | 设备可用于捕获静止图像。 |
存储 | 设备可用于存储文件。 |
DeviceCapabilities.cpp 模块中的 ListFunctionalCategories 函数演示所选设备的功能类别的检索。
应用程序可以使用下表中所述的接口检索设备支持的功能类别。
接口 | 说明 |
---|---|
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);
}
}
相关主题