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.

Category 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 eseguire il rendering.
Servizio messaggi brevi (SMS) Il dispositivo supporta la messaggistica di testo.
Acquisizione di immagini ancora Il dispositivo può essere usato per acquisire immagini ancora.
Archiviazione 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 della categoria funzionale.
Interfaccia IPortableDevicePropVariantCollection Usato per enumerare e archiviare i 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 oggetto IPortableDevicePropVariantCollection .

Il passaggio successivo è l'enumerazione e la visualizzazione delle categorie supportate. Il primo passaggio che l'applicazione di esempio esegue consiste nel recuperare il conteggio delle 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 per programmatori