擷取裝置所支援的功能類別
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);
}
}
相關主題