Share via


擷取裝置所支援的功能類別

Windows 可攜式裝置可支援一或多個功能類別。 下表說明這些類別。

類別 描述
音訊擷 裝置可用來錄製音訊。
轉譯資訊 裝置提供資料,描述其能夠轉譯的媒體檔案。
簡訊服務 (SMS) 裝置支援簡訊。
仍會擷取映射 裝置可用來擷取仍然影像。
儲存體 裝置可用來儲存檔案。

 

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 介面

程式設計指南