Freigeben über


Abrufen der von einem Gerät unterstützten Inhaltstypen

Wie im Thema Abrufen der von einem Gerät unterstützten Funktionskategorien erwähnt, unterstützen tragbare Windows-Geräte möglicherweise eine oder mehrere Funktionskategorien. Jede bestimmte Funktionskategorie kann einen oder mehrere Inhaltstypen unterstützen. Beispielsweise unterstützt die Speicherkategorie möglicherweise Inhaltstypen wie Ordner, Audio und Bild.

Eine Beschreibung der von WPD unterstützten Inhaltstypen finden Sie im Thema WPD_CONTENT_TYPE_ALL .

Die ListSupportedContentTypes-Funktion im Modul DeviceCapabilities.cpp veranschaulicht den Abruf von Inhaltstypen für die funktionsbezogenen Kategorien, die von einem ausgewählten Gerät unterstützt werden.

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.

 

Der Code in der ListSupportedContentTypes-Funktion ist fast identisch mit dem Code in der ListFunctionalCategories-Funktion. (Weitere Informationen finden Sie im Thema Abrufen von Funktionskategorien, die von einem Gerät unterstützt werden .) Der einzige Unterschied ist der Aufruf der IPortableDeviceCapabilities::GetSupportedContentTypes-Methode , die in der Schleife angezeigt wird, die die Funktionskategorien durchläuft.

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

IPortableDevice-Schnittstelle

IPortableDeviceCapabilities-Schnittstelle

IPortableDevicePropVariantCollection-Schnittstelle

Programmierhandbuch