Récupération des propriétés d’un objet unique
Une fois que votre application a récupéré un identificateur d’objet (voir la rubrique Énumération de contenu ) pour un objet donné, elle peut récupérer des informations descriptives sur cet objet en appelant des méthodes dans l’interface IPortableDeviceProperties et l’interface IPortableDeviceKeyCollection.
La méthode IPortableDeviceProperties::GetValues récupère une liste de propriétés spécifiées pour un objet donné. (Votre application peut également appeler la méthode GetValues et spécifier une valeur NULL pour le paramètre pKeys afin de récupérer toutes les propriétés d’un objet donné ; toutefois, les performances de cette méthode peuvent être considérablement plus lentes lors de la récupération de toutes les propriétés.)
Toutefois, avant que votre application appelle GetValues, elle doit identifier les propriétés à récupérer en définissant les clés correspondantes dans un objet IPortableDeviceKeyCollection. Votre application identifie les propriétés d’intérêt en appelant la méthode IPortableDeviceKeyCollection::Add et en fournissant une valeur PROPERTYKEY qui identifie chaque propriété qu’elle va récupérer.
La fonction ReadContentProperties dans le module ContentProperties.cpp de l’exemple d’application montre comment les cinq propriétés ont été récupérées pour un objet sélectionné. Le tableau suivant décrit chacune de ces propriétés et leur valeur REFPROPERTYKEY correspondante.
Propriété | Description | PROPERTYKEY |
---|---|---|
Identificateur d’objet parent | Chaîne qui spécifie l’identificateur du parent de l’objet donné. | WPD_OBJECT_PARENT_ID |
Nom d’objet | Chaîne qui spécifie le nom de l’objet donné. | WPD_OBJECT_NAME |
Identificateur unique persistant | Chaîne qui spécifie un identificateur unique pour l’objet donné. (Cet identificateur est persistant entre les sessions, contrairement à l’identificateur d’objet.) | WPD_OBJECT_PERSISTENT_UNIQUE_ID |
Format d’objet | Identificateur global unique (GUID) qui spécifie le format du fichier correspondant à un objet donné. | WPD_OBJECT_FORMAT |
Type de contenu d’objet | GUID qui spécifie le type de contenu associé à un objet donné. | WPD_OBJECT_CONTENT_TYPE |
L’extrait suivant de la fonction ReadContentProperties montre comment l’exemple d’application a utilisé l’interface IPortableDeviceKeyCollection et la méthode IPortableDeviceKeyCollection::Add pour identifier les propriétés qu’elle récupérerait.
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);
}
}
}
Une fois que l’exemple d’application a défini les clés appropriées, elle a appelé la méthode IPortableDeviceProperties::GetValues pour récupérer les valeurs spécifiées pour l’objet donné.
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);
}
}
Rubriques connexes