Abrufen von Eigenschaften für ein einzelnes Objekt
Nachdem Ihre Anwendung einen Objektbezeichner (siehe Thema Enumerating Content ) für ein bestimmtes Objekt abgerufen hat, kann sie beschreibende Informationen zu diesem Objekt abrufen, indem sie Methoden in der IPortableDeviceProperties-Schnittstelle und der IPortableDeviceKeyCollection-Schnittstelle aufruft.
Die IPortableDeviceProperties::GetValues-Methode ruft eine Liste der angegebenen Eigenschaften für ein bestimmtes Objekt ab. (Ihre Anwendung könnte auch die GetValues-Methode aufrufen und einen NULL-Wert für den pKeys-Parameter angeben, um alle Eigenschaften für ein bestimmtes Objekt abzurufen. Die Leistung dieser Methode kann jedoch beim Abrufen aller Eigenschaften erheblich langsamer sein.)
Bevor Ihre Anwendung GetValues aufruft, muss sie jedoch die abzurufenden Eigenschaften identifizieren, indem sie entsprechende Schlüssel in einem IPortableDeviceKeyCollection-Objekt festlegt. Ihre Anwendung identifiziert die interessanten Eigenschaften, indem sie die IPortableDeviceKeyCollection::Add-Methode aufruft und einen PROPERTYKEY-Wert angibt, der jede eigenschaft identifiziert, die sie abruft.
Die ReadContentProperties-Funktion im Modul ContentProperties.cpp der Beispielanwendung veranschaulicht, wie die fünf Eigenschaften für ein ausgewähltes Objekt abgerufen wurden. In der folgenden Tabelle werden jede dieser Eigenschaften und der zugehörige REFPROPERTYKEY-Wert beschrieben.
Eigenschaft | Beschreibung | PROPERTYKEY |
---|---|---|
Bezeichner des übergeordneten Objekts | Eine Zeichenfolge, die den Bezeichner für das übergeordnete Objekt des angegebenen Objekts angibt. | WPD_OBJECT_PARENT_ID |
Objektname | Eine Zeichenfolge, die den Namen des angegebenen Objekts angibt. | WPD_OBJECT_NAME |
Persistenter eindeutiger Bezeichner | Eine Zeichenfolge, die einen eindeutigen Bezeichner für das angegebene Objekt angibt. (Dieser Bezeichner ist im Gegensatz zum Objektbezeichner sitzungsübergreifend persistent.) | WPD_OBJECT_PERSISTENT_UNIQUE_ID |
Objektformat | Ein Globally Unique Identifier (GUID), der das Format der Datei angibt, das einem bestimmten Objekt entspricht. | WPD_OBJECT_FORMAT |
Objektinhaltstyp | Eine GUID, die den Typ des Inhalts angibt, der einem bestimmten Objekt zugeordnet ist. | WPD_OBJECT_CONTENT_TYPE |
Der folgende Auszug aus der ReadContentProperties-Funktion veranschaulicht, wie die Beispielanwendung die IPortableDeviceKeyCollection-Schnittstelle und die IPortableDeviceKeyCollection::Add-Methode verwendet hat , um die eigenschaften zu identifizieren, die sie abrufen würde.
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);
}
}
}
Nachdem die Beispielanwendung die entsprechenden Schlüssel festgelegt hat, wurde die IPortableDeviceProperties::GetValues-Methode aufgerufen, um die angegebenen Werte für das angegebene Objekt abzurufen.
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);
}
}
Zugehörige Themen