Udostępnij za pośrednictwem


Pobieranie właściwości pojedynczego obiektu

Gdy aplikacja pobierze identyfikator obiektu (zobacz Wyliczanie zawartości tematu) dla danego obiektu, może pobrać opisowe informacje o tym obiekcie, wywołując metody w interfejs ie IPortableDeviceProperties i interfejsie IPortableDeviceKeyCollection .

Metoda IPortableDeviceProperties::GetValues pobiera listę określonych właściwości dla danego obiektu. (Aplikacja może również wywołać metodę GetValues i określić wartość NULL parametru pKeys w celu pobrania wszystkich właściwości dla danego obiektu, jednak wydajność tej metody może być znacznie wolniejsza podczas pobierania wszystkich właściwości).

Przed wywołaniem funkcji GetValues aplikacja musi jednak zidentyfikować właściwości do pobrania, ustawiając odpowiednie klucze w obiekcie IPortableDeviceKeyCollection . Aplikacja zidentyfikuje interesujące właściwości, wywołując IPortableDeviceKeyCollection::Dodaj metodę i podając wartość PROPERTYKEY identyfikującą każdą właściwość, która zostanie pobrana.

Funkcja ReadContentProperties w module ContentProperties.cpp przykładowej aplikacji pokazuje, jak pobrano pięć właściwości dla wybranego obiektu. W poniższej tabeli opisano każdą z tych właściwości i odpowiadającą im wartość REFPROPERTYKEY.

Własność Opis KLUCZ WŁAŚCIWOŚCI
Identyfikator obiektu nadrzędnego Ciąg określający identyfikator obiektu nadrzędnego danego obiektu. WPD_OBJECT_PARENT_ID
Nazwa obiektu Ciąg określający nazwę danego obiektu. WPD_OBJECT_NAME
Trwały unikatowy identyfikator Ciąg określający unikatowy identyfikator danego obiektu. (Ten identyfikator jest trwały między sesjami, w przeciwieństwie do identyfikatora obiektu). WPD_OBIEKT_TRWAŁY_UNIKALNY_ID
Format obiektu Globalnie unikatowy identyfikator (GUID), który określa format pliku odpowiadającego określonemu obiektowi. WPD_OBJECT_FORMAT
Typ zawartości obiektu Identyfikator GUID określający typ zawartości skojarzonej z danym obiektem. WPD_OBJECT_CONTENT_TYPE

 

Poniższy fragment funkcji ReadContentProperties przedstawia sposób użycia przykładowej aplikacji interfejsu IPortableDeviceKeyCollection oraz metody IPortableDeviceKeyCollection::Add w celu zidentyfikowania właściwości, które będą pobierane.

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

Gdy przykładowa aplikacja ustawiła odpowiednie klucze, wywołała metodę IPortableDeviceProperties::GetValues, aby pobrać określone wartości dla danego obiektu.

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

Interfejs IPortableDevice

Interfejs IPortableDeviceKeyCollection

Interfejs IPortableDeviceProperties

Przewodnik programowania