Condividi tramite


Recupero dei tipi di contenuto supportati da un dispositivo

Come indicato nell'argomento Recupero delle categorie funzionali supportate da un dispositivo, Windows i dispositivi portatili possono supportare una o più categorie funzionali. Qualsiasi categoria funzionale specifica può supportare uno o più tipi di contenuto. Ad esempio, la categoria di archiviazione può supportare i tipi di contenuto di cartella, audio e immagine.

Per una descrizione dei tipi di contenuto supportati da WPD, vedere l'argomento WPD_CONTENT_TYPE_ALL .

La funzione ListSupportedContentTypes nel modulo DeviceCapabilities.cpp illustra il recupero dei tipi di contenuto per le categorie funzionali supportate da un dispositivo selezionato.

L'applicazione può recuperare le categorie funzionali supportate da un dispositivo usando le interfacce descritte nella tabella seguente.

Interfaccia Descrizione
Interfaccia IPortableDeviceCapabilities Fornisce l'accesso ai metodi di recupero delle categorie funzionali.
Interfaccia IPortableDevicePropVariantCollection Usato per enumerare e archiviare i dati di categoria funzionale.

 

Il codice trovato nella funzione ListSupportedContentTypes è quasi identico al codice presente nella funzione ListFunctionalCategories. Vedere l'argomento Recupero di categorie funzionali supportate da un dispositivo . La differenza è la chiamata al metodo IPortableDeviceCapabilities::GetSupportedContentTypes , che viene visualizzato all'interno del ciclo che scorre le categorie funzionali.

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

Interfaccia IPortableDevice

Interfaccia IPortableDeviceCapabilities

Interfaccia IPortableDevicePropVariantCollection

Guida alla programmazione