Recuperar propiedades para un único objeto
Después de que la aplicación recupere un identificador de objeto (vea el tema Enumerating Content ) para un objeto determinado, puede recuperar información descriptiva sobre ese objeto llamando a métodos en la interfaz IPortableDeviceProperties y la interfaz IPortableDeviceKeyCollection.
El método IPortableDeviceProperties::GetValues recupera una lista de propiedades especificadas para un objeto determinado. (La aplicación también podría llamar al método GetValues y especificar un valor NULL para el parámetro pKeys para recuperar todas las propiedades de un objeto determinado; sin embargo, el rendimiento de este método puede ser significativamente más lento al recuperar todas las propiedades).
Sin embargo, antes de que la aplicación llame a GetValues, debe identificar las propiedades que se van a recuperar estableciendo las claves correspondientes en un objeto IPortableDeviceKeyCollection. La aplicación identificará las propiedades de interés llamando al método IPortableDeviceKeyCollection::Add y proporcionando un valor PROPERTYKEY que identifique cada propiedad que recuperará.
La función ReadContentProperties del módulo ContentProperties.cpp de la aplicación de ejemplo muestra cómo se recuperaron las cinco propiedades para un objeto seleccionado. En la tabla siguiente se describe cada una de estas propiedades y su valor REFPROPERTYKEY correspondiente.
Propiedad | Descripción | PROPERTYKEY |
---|---|---|
Identificador de objeto primario | Cadena que especifica el identificador del elemento primario del objeto especificado. | WPD_OBJECT_PARENT_ID |
Nombre del objeto | Cadena que especifica el nombre del objeto especificado. | WPD_OBJECT_NAME |
Identificador único persistente | Cadena que especifica un identificador único para el objeto especificado. (Este identificador es persistente entre sesiones, a diferencia del identificador de objeto). | WPD_OBJECT_PERSISTENT_UNIQUE_ID |
Formato de objeto | Identificador único global (GUID) que especifica el formato del archivo correspondiente a un objeto determinado. | WPD_OBJECT_FORMAT |
Tipo de contenido de objeto | GUID que especifica el tipo de contenido asociado a un objeto determinado. | WPD_OBJECT_CONTENT_TYPE |
El siguiente extracto de la función ReadContentProperties muestra cómo la aplicación de ejemplo usó la interfaz IPortableDeviceKeyCollection y el método IPortableDeviceKeyCollection::Add para identificar las propiedades que recuperaría.
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);
}
}
}
Una vez que la aplicación de ejemplo establece las claves adecuadas, llamó al método IPortableDeviceProperties::GetValues para recuperar los valores especificados para el objeto especificado.
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);
}
}
Temas relacionados