Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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);
}
}
Tópicos relacionados