Abrufen der von einem Gerät unterstützten Funktionalen Kategorien

Windows Portable Geräte können eine oder mehrere Funktionskategorien unterstützen. Diese Kategorien werden in der folgenden Tabelle beschrieben.

Category Beschreibung
Audioaufnahme Das Gerät kann zum Aufzeichnen von Audiodaten verwendet werden.
Renderinginformationen Das Gerät stellt Daten zur Beschreibung der Mediendateien zur Auswahl, die gerendert werden können.
Kurznachrichtendienst (SMS) Das Gerät unterstützt SMS.
Still Image Capture Das Gerät kann verwendet werden, um Noch-Bilder zu erfassen.
Storage Das Gerät kann zum Speichern von Dateien verwendet werden.

Die Funktion ListFunctionalCategories im Modul DeviceCapabilities.cpp veranschaulicht das Abrufen von Funktionskategorien für ein ausgewähltes Gerät.

Ihre Anwendung kann die von einem Gerät unterstützten Funktionskategorien 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.

Die erste Aufgabe, die von der Beispielanwendung ausgeführt wird, ist das Abrufen eines IPortableDeviceCapabilities-Objekts, das zum Abrufen der Funktionskategorien auf dem ausgewählten Gerät verwendet wird.

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

Die abgerufenen Kategorien werden in einem IPortableDevicePropVariantCollection-Objekt gespeichert.

Der nächste Schritt ist die Enumeration und Anzeige der unterstützten Kategorien. Der erste Schritt der Beispielanwendung besteht im Abrufen der Anzahl der unterstützten Kategorien. Anschließend wird diese Anzahl verwendet, um das IPortableDevicePropVariantCollection-Objekt zu iterieren, das die unterstützten Kategorien enthält.

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-Schnittstelle

IPortableDeviceCapabilities-Schnittstelle

IPortableDevicePropVariantCollection-Schnittstelle

Programmierhandbuch