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);
}
}
Tópicos relacionados