Freigeben über


Abrufen der von einem Gerät unterstützten Funktionskategorien

Tragbare Windows-Geräte unterstützen möglicherweise eine oder mehrere Funktionskategorien. Diese Kategorien werden in der folgenden Tabelle beschrieben.

Category Beschreibung
Audioaufnahme Das Gerät kann zum Aufzeichnen von Audio verwendet werden.
Renderinginformationen Das Gerät stellt Daten bereit, die die Mediendateien beschreiben, die gerendert werden können.
Kurznachrichtendienst (SMS) Das Gerät unterstützt Textnachrichten.
Standbilderfassung Das Gerät kann zum Erfassen von Standbildern verwendet werden.
Storage Das Gerät kann zum Speichern von Dateien verwendet werden.

 

Die ListFunctionalCategories-Funktion im Modul DeviceCapabilities.cpp veranschaulicht den Abruf 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 Funktionsgruppenabrufmethoden.
IPortableDevicePropVariantCollection-Schnittstelle Wird zum Aufzählen und Speichern von Funktionskategoriedaten verwendet.

 

Die erste Aufgabe, die von der Beispielanwendung ausgeführt wird, ist der Abruf 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, den die Beispielanwendung ausgeführt hat, besteht darin, die Anzahl der unterstützten Kategorien abzurufen. Anschließend wird diese Anzahl verwendet, um das IPortableDevicePropVariantCollection-Objekt zu durchlaufen, 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