检索设备支持的功能类别

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

IPortableDevice 接口

IPortableDeviceCapabilities 接口

IPortableDevicePropVariantCollection 接口

编程指南