Condividi tramite


Recupero delle categorie funzionali supportate da un dispositivo

I dispositivi portatili Windows possono supportare una o più categorie funzionali. Queste categorie sono descritte nella tabella seguente.

Categoria Descrizione
Acquisizione audio Il dispositivo può essere usato per registrare l'audio.
Informazioni sul rendering Il dispositivo fornisce dati che descrivono i file multimediali che è in grado di riprodurre.
Servizio messaggi brevi (SMS) Il dispositivo supporta la messaggistica di testo.
Acquisizione di immagini fisse Il dispositivo può essere usato per acquisire immagini fisse.
Immagazzinamento Il dispositivo può essere usato per archiviare i file.

 

La funzione ListFunctionalCategories nel modulo DeviceCapabilities.cpp illustra il recupero di categorie funzionali per 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 dati di categoria funzionale.

 

La prima attività eseguita dall'applicazione di esempio è il recupero di un oggetto IPortableDeviceCapabilities, usato per recuperare le categorie funzionali nel dispositivo selezionato.

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

Le categorie recuperate vengono archiviate in un oggettoIPortableDevicePropVariantCollection.

Il passaggio successivo è l'enumerazione e la visualizzazione delle categorie supportate. Il primo passaggio eseguito dall'applicazione di esempio consiste nel recuperare il numero di categorie supportate. Usa quindi questo conteggio per scorrere l'oggetto IPortableDevicePropVariantCollection che contiene le categorie supportate.

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

interfaccia IPortableDevice

Interfaccia IPortableDeviceCapabilities

Interfaccia IPortableDevicePropVariantCollection

Guida alla programmazione