Partilhar via


Recuperando propriedades para um único objeto

Quando o seu aplicativo recupera um identificador de objeto (consulte o tópico Enumerating Content) para um objeto específico, 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 de NULL para o parâmetro pKeys para 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.)

Antes de seu aplicativo chamar GetValues, no entanto, 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 será recuperada.

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 CHAVE DE PROPRIEDADE
Identificador de objeto pai Uma cadeia de caracteres que especifica o identificador para o pai de determinado objeto. WPD_OBJECT_PARENT_ID
Nome do objeto Uma cadeia de caracteres que especifica o nome do objeto determinado. WPD_OBJECT_NAME
Identificador único persistente Uma cadeia de caracteres que especifica um identificador exclusivo para determinado objeto. (Esse identificador é persistente entre sessões, ao contrário do identificador de objeto.) WPD_OBJECT_PERSISTENT_UNIQUE_ID
Formato do objeto Um identificador global exclusivo (GUID) 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 determinado.

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

Interface IPortableDevice

Interface IPortableDeviceKeyCollection

Interface IPortableDeviceProperties

Guia de Programação