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 angegebenes 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 deutlich langsamer sein, wenn alle Eigenschaften abgerufen werden.)

Bevor Ihre Anwendung GetValues aufruft, muss sie jedoch die abzurufenden Eigenschaften identifizieren, indem entsprechende Schlüssel in einem IPortableDeviceKeyCollection-Objekt festlegen. Ihre Anwendung identifiziert die eigenschaften von Interesse, indem sie die IPortableDeviceKeyCollection::Add-Methode aufruft und einen PROPERTYKEY-Wert anweist, der jede eigenschaft identifiziert, die sie abruft.

Die ReadContentProperties-Funktion im ContentProperties.cpp-Modul 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 entsprechende REFPROPERTYKEY-Wert beschrieben.

Eigenschaft BESCHREIBUNG PROPERTYKEY
Bezeichner des übergeordneten Objekts Eine Zeichenfolge, die den Bezeichner für das übergeordnete Element des angegebenen Objekts angibt. ÜBERGEORDNETE ID DES _ _ WPD-OBJEKTS _
Objektname Eine Zeichenfolge, die den Namen des angegebenen Objekts angibt. _WPD-OBJEKTNAME _
Persistenter eindeutiger Bezeichner Eine Zeichenfolge, die einen eindeutigen Bezeichner für das gegebene Objekt angibt. (Dieser Bezeichner ist im Gegensatz zum Objektbezeichner sitzungsübergreifend persistent.) PERSISTENTE EINDEUTIGE ID _ DES WPD-OBJEKTS _ _ _
Objektformat Ein GUID (Globally Unique Identifier), der das Format der Datei angibt, die einem angegebenen Objekt entspricht. _WPD-OBJEKTFORMAT _
Objektinhaltstyp Eine GUID, die den Typ des Inhalts angibt, der einem angegebenen -Objekt zugeordnet ist. _ _ WPD-OBJEKTINHALTSTYP _

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);
        }
    }
}

Sobald die Beispielanwendung die entsprechenden Schlüssel festgelegt hat, hat sie 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);
    }
}

IPortableDevice-Schnittstelle

IPortableDeviceKeyCollection-Schnittstelle

IPortableDeviceProperties-Schnittstelle

Programmierhandbuch