共用方式為


擷取單一物件的屬性

當應用程式擷取物件識別碼 (查看指定物件的 列舉內容 主題) 之後,就可以藉由在 IPortableDeviceProperties 介面IPortableDeviceKeyCollection 介面中呼叫方法來擷取該物件的描述性資訊。

IPortableDeviceProperties::GetValues方法會擷取指定物件的指定屬性清單。 (您的應用程式也可以呼叫 GetValues 方法,並為 pKeys 參數指定 Null 值,以擷取指定物件的所有屬性;不過,擷取所有屬性時,這個方法的效能可能會明顯變慢。)

不過,在您的應用程式呼叫 GetValues 之前,它必須藉由在 IPortableDeviceKeyCollection 物件中設定對應的索引鍵來識別要擷取的屬性。 您的應用程式會呼叫 IPortableDeviceKeyCollection::Add 方法來識別感興趣的屬性,並提供 PROPERTYKEY 值來識別其將擷取的每個屬性。

範例應用程式 ContentProperties.cpp 模組中的 ReadContentProperties 函式示範如何擷取所選物件的五個屬性。 下表描述這些屬性及其對應的 REFPROPERTYKEY 值。

屬性 Description PROPERTYKEY
父物件識別碼 字串,指定指定指定物件父系的識別碼。 WPD_OBJECT_PARENT_ID
物件名稱 指定指定指定物件名稱的字串。 WPD_OBJECT_NAME
永續性唯一識別碼 指定指定指定物件唯一識別碼的字串。 (此識別碼在會話之間是持續性的,與物件識別碼不同。) WPD_OBJECT_PERSISTENT_UNIQUE_ID
物件格式 全域唯一識別碼 (GUID) ,指定對應至指定物件的檔案格式。 WPD_OBJECT_FORMAT
物件內容類型 GUID,指定與指定物件相關聯的內容類型。 WPD_OBJECT_CONTENT_TYPE

 

下列來自 ReadContentProperties 函式的摘錄示範範例應用程式如何使用 IPortableDeviceKeyCollection 介面IPortableDeviceKeyCollection::Add 方法來識別其所擷取的屬性。

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

範例應用程式設定適當的索引鍵之後,它會呼叫 IPortableDeviceProperties::GetValues 方法,以擷取指定物件的指定值。

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 介面

IPortableDeviceKeyCollection 介面

IPortableDeviceProperties 介面

程式設計指南