Compartilhar via


Recuperando propriedades para um único objeto

Depois que o aplicativo recupera um identificador de objeto (consulte o tópico Conteúdo de Enumeração ) para um determinado objeto, ele pode recuperar informações descritivas sobre esse objeto chamando métodos na interface IPortableDeviceProperties e na interface IPortableDeviceKeyCollection.

O método IPortableDeviceProperties::GetValues recupera uma lista de propriedades especificadas para um determinado objeto. (Seu aplicativo também pode chamar o método GetValues e especificar um valor NULL para o parâmetro pKeys recuperar todas as propriedades de um determinado objeto; no entanto, o desempenho desse método pode ser significativamente mais lento ao recuperar todas as propriedades.)

No entanto, antes que seu aplicativo chame GetValues, ele precisa identificar as propriedades a serem recuperadas definindo as chaves correspondentes em um objeto IPortableDeviceKeyCollection. Seu aplicativo identificará as propriedades de interesse chamando o método IPortableDeviceKeyCollection::Add e fornecendo um valor PROPERTYKEY que identifica cada propriedade que ele recuperará.

A função ReadContentProperties no módulo ContentProperties.cpp do aplicativo de exemplo demonstra como as cinco propriedades foram recuperadas para um objeto selecionado. A tabela a seguir descreve cada uma dessas propriedades e seu valor REFPROPERTYKEY correspondente.

Propriedade Descrição PROPERTYKEY
Identificador de objeto pai Uma cadeia de caracteres que especifica o identificador do pai do objeto fornecido. WPD_OBJECT_PARENT_ID
Nome do objeto Uma cadeia de caracteres que especifica o nome do objeto fornecido. WPD_OBJECT_NAME
Identificador exclusivo persistente Uma cadeia de caracteres que especifica um identificador exclusivo para o objeto fornecido. (Esse identificador é persistente entre sessões, ao contrário do identificador de objeto.) WPD_OBJECT_PERSISTENT_UNIQUE_ID
Formato do objeto Um GUID (identificador global exclusivo) que especifica o formato do arquivo correspondente a um determinado objeto. WPD_OBJECT_FORMAT
Tipo de conteúdo do objeto Um GUID que especifica o tipo de conteúdo associado a um determinado objeto. WPD_OBJECT_CONTENT_TYPE

 

O trecho a seguir da função ReadContentProperties demonstra como o aplicativo de exemplo usou a interface IPortableDeviceKeyCollection e o método IPortableDeviceKeyCollection::Add para identificar as propriedades que ele recuperaria.

hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection,
                      NULL,
                      CLSCTX_INPROC_SERVER,
                      IID_PPV_ARGS(&pPropertiesToRead));
if (SUCCEEDED(hr))
{
    // 4) Populate the IPortableDeviceKeyCollection with the keys we wish to read.
    // NOTE: We are not handling any special error cases here so we can proceed with
    // adding as many of the target properties as we can.
    if (pPropertiesToRead != NULL)
    {
        HRESULT hrTemp = S_OK;
        hrTemp = pPropertiesToRead->Add(WPD_OBJECT_PARENT_ID);
        if (FAILED(hrTemp))
        {
            printf("! Failed to add WPD_OBJECT_PARENT_ID to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
        }

        hrTemp = pPropertiesToRead->Add(WPD_OBJECT_NAME);
        if (FAILED(hrTemp))
        {
            printf("! Failed to add WPD_OBJECT_NAME to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
        }

        hrTemp = pPropertiesToRead->Add(WPD_OBJECT_PERSISTENT_UNIQUE_ID);
        if (FAILED(hrTemp))
        {
            printf("! Failed to add WPD_OBJECT_PERSISTENT_UNIQUE_ID to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
        }

        hrTemp = pPropertiesToRead->Add(WPD_OBJECT_FORMAT);
        if (FAILED(hrTemp))
        {
            printf("! Failed to add WPD_OBJECT_FORMAT to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
        }

        hrTemp = pPropertiesToRead->Add(WPD_OBJECT_CONTENT_TYPE);
        if (FAILED(hrTemp))
        {
            printf("! Failed to add WPD_OBJECT_CONTENT_TYPE to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
        }
    }
}

Depois que o aplicativo de exemplo definiu as chaves apropriadas, ele chamou o método IPortableDeviceProperties::GetValues para recuperar os valores especificados para o objeto fornecido.

if (SUCCEEDED(hr))
{
    hr = pProperties->GetValues(szSelection,         // The object whose properties we are reading
                                pPropertiesToRead,   // The properties we want to read
                                &pObjectProperties); // Driver supplied property values for the specified object
    if (FAILED(hr))
    {
        printf("! Failed to get all properties for object '%ws', hr= 0x%lx\n", szSelection, hr);
    }
}

IPortableDevice Interface

IPortableDeviceKeyCollection Interface

IPortableDeviceProperties Interface

Guia de programação