Abrufen der von einem Gerät unterstützten Inhaltstypen
Wie im Thema Abrufen der von einem Gerät unterstützten funktionalen Kategorien erwähnt, unterstützt Windows Portable Devices möglicherweise mindestens eine Funktionale Kategorie. Jede funktionstüchtige Kategorie kann einen oder mehrere Inhaltstypen unterstützen. Beispielsweise kann die Speicherkategorie Inhaltstypen von Ordnern, Audiodateien und Bildern unterstützen.
Eine Beschreibung der von WPD unterstützten Inhaltstypen finden Sie im Thema WPD _ CONTENT TYPE _ _ ALL.
Die ListSupportedContentTypes-Funktion im DeviceCapabilities.cpp-Modul veranschaulicht das Abrufen von Inhaltstypen für die von einem ausgewählten Gerät unterstützten Funktionalen Kategorien.
Ihre Anwendung kann die von einem Gerät unterstützten Funktionalen Kategorien mithilfe der in der folgenden Tabelle beschriebenen Schnittstellen abrufen.
| Schnittstelle | Beschreibung |
|---|---|
| IPortableDeviceCapabilities-Schnittstelle | Ermöglicht den Zugriff auf die Funktionskategorieabrufmethoden. |
| IPortableDevicePropVariantCollection-Schnittstelle | Wird zum Aufzählen und Speichern von Daten der Funktionalen Kategorie verwendet. |
Der Code in der ListSupportedContentTypes-Funktion ist fast identisch mit dem Code in der ListFunctionalCategories-Funktion. (Weitere Informationen finden Sie im Thema Abrufen von funktionstüchtigen Kategorien, die von einem Gerät unterstützt werden.) Der einzige Unterschied besteht im Aufruf der IPortableDeviceCapabilities::GetSupportedContentTypes-Methode, die innerhalb der Schleife angezeigt wird, die die funktionalen Kategorien durch iteriert.
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.
// We will use these categories to enumerate functional objects
// that fall within them.
if (SUCCEEDED(hr))
{
hr = pCapabilities->GetFunctionalCategories(&pCategories);
if (FAILED(hr))
{
printf("! Failed to get functional categories from the device, hr = 0x%lx\n",hr);
}
}
// Get the number of functional categories found on the device.
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 and supported content types.
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) &&
(pv.vt == VT_CLSID))
{
// Display the functional category name
printf("Functional Category: ");
DisplayFunctionalCategory(*pv.puuid);
printf("\n");
// Display the content types supported for this category
CComPtr<IPortableDevicePropVariantCollection> pContentTypes;
hr = pCapabilities->GetSupportedContentTypes(*pv.puuid, &pContentTypes);
if (SUCCEEDED(hr))
{
printf("Supported Content Types: ");
DisplayContentTypes(pContentTypes);
printf("\n\n");
}
else
{
printf("! Failed to get supported content types from the device, hr = 0x%lx\n",hr);
}
}
else
{
printf("! Invalid functional category found\n");
}
}
PropVariantClear(&pv);
}
}