次の方法で共有


WPD オブジェクトのプロパティの取得

多くの場合、サービスには、各サービスがサポートする形式のいずれかに属する子オブジェクトが含まれています。 たとえば、連絡先サービスは、抽象連絡先形式の複数の連絡先オブジェクトをサポートする場合があります。 各連絡先オブジェクトは、関連するプロパティ (連絡先名、電話番号、メール アドレスなど) によって記述されます。

WpdServiceApiSample アプリケーションには、アプリケーションが特定の Contacts サービスでサポートされている content-object プロパティを取得する方法を示すコードが含まれています。 このサンプルでは、次のインターフェイスを使用します。

インターフェイス 説明
IPortableDeviceService サポートされているサービス メソッドにアクセスするための IPortableDeviceContent2 インターフェイスを取得します。
IPortableDeviceContent2 コンテンツ固有のメソッドへのアクセスを提供します。
IPortableDeviceProperties オブジェクト プロパティの値を取得します。
IPortableDeviceValues そのオブジェクトに対して読み取られたプロパティ値を保持します。
IPortableDeviceKeyCollection 特定のメソッドのパラメーターを格納します。

 

ユーザーがコマンド ラインでオプション "7" を選択すると、アプリケーションは ContentProperties.cpp モジュールにある ReadContentProperties メソッドを呼び出します。

このメソッドは、指定された連絡先オブジェクトの次の 4 つのプロパティを取得します。

プロパティ 説明 Device Services PROPERTYKEY 同等のWPD_PROPERTYKEY
親オブジェクト識別子 指定されたオブジェクトの親の識別子を指定する文字列。 PKEY_GenericObj_ParentID WPD_OBJECT_PARENT_ID
オブジェクト名 指定されたオブジェクトの名前を指定する文字列 PKEY_GenericObj_Name WPD_OBJECT_NAME
永続的な一意識別子 指定したオブジェクトの一意識別子を指定する文字列。 この識別子は、オブジェクト識別子とは異なり、セッション間で永続的です。 サービスの場合、これは GUID の文字列表現である必要があります。 PKEY_GenericObj_PersistentUID WPD_OBJECT_PERSISTENT_UNIQUE_ID
オブジェクトの形式 特定のオブジェクトに対応するファイルの形式を指定するグローバル一意識別子 (GUID) PKEY_GenericObj_ObjectFormat WPD_OBJECT_FORMAT

 

  • 親 ID
  • Name
  • PersistentUID
  • フォーマット

コンテンツ プロパティを取得する前に、サンプル アプリケーションは接続されているデバイスで連絡先サービスを開きます。

ReadContentProperties メソッドの次のコードは、アプリケーションが IPortableDeviceContent2 インターフェイスを使用して IPortableDeviceProperties インターフェイスを取得する方法を示しています。 要求されたプロパティの PROPERTYKEYS を IPortableDeviceProperties::GetValues メソッドに渡すことで、 ReadContentProperties は要求された値を取得し、コンソール ウィンドウに表示します。

// Reads properties for the user specified object.
void ReadContentProperties(
    IPortableDeviceService*    pService)
{
    if (pService == NULL)
    {
        printf("! A NULL IPortableDeviceService interface pointer was received\n");
        return;
    }

    HRESULT                               hr              = S_OK;
    WCHAR                                 szSelection[81] = {0};
    CComPtr<IPortableDeviceProperties>    pProperties;
    CComPtr<IPortableDeviceValues>        pObjectProperties;
    CComPtr<IPortableDeviceContent2>      pContent;
    CComPtr<IPortableDeviceKeyCollection> pPropertiesToRead;

    // Prompt user to enter an object identifier on the device to read properties from.
    printf("Enter the identifer of the object you wish to read properties from.\n>");
    hr = StringCbGetsW(szSelection,sizeof(szSelection));
    if (FAILED(hr))
    {
        printf("An invalid object identifier was specified, aborting property reading\n");
    }

    // 1) Get an IPortableDeviceContent2 interface from the IPortableDeviceService interface to
    // access the content-specific methods.
    if (SUCCEEDED(hr))
    {
        hr = pService->Content(&pContent);
        if (FAILED(hr))
        {
            printf("! Failed to get IPortableDeviceContent2 from IPortableDeviceService, hr = 0x%lx\n",hr);
        }
    }

    // 2) Get an IPortableDeviceProperties interface from the IPortableDeviceContent2 interface
    // to access the property-specific methods.
    if (SUCCEEDED(hr))
    {
        hr = pContent->Properties(&pProperties);
        if (FAILED(hr))
        {
            printf("! Failed to get IPortableDeviceProperties from IPortableDeviceContent2, hr = 0x%lx\n",hr);
        }
    }

    // 3) CoCreate an IPortableDeviceKeyCollection interface to hold the property keys
    // we wish to read.
    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(PKEY_GenericObj_ParentID);
            if (FAILED(hrTemp))
            {
                printf("! Failed to add PKEY_GenericObj_ParentID to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
            }

            hrTemp = pPropertiesToRead->Add(PKEY_GenericObj_Name);
            if (FAILED(hrTemp))
            {
                printf("! Failed to add PKEY_GenericObj_Name to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
            }

            hrTemp = pPropertiesToRead->Add(PKEY_GenericObj_PersistentUID);
            if (FAILED(hrTemp))
            {
                printf("! Failed to add PKEY_GenericObj_PersistentUID to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
            }

            hrTemp = pPropertiesToRead->Add(PKEY_GenericObj_ObjectFormat);
            if (FAILED(hrTemp))
            {
                printf("! Failed to add PKEY_GenericObj_ObjectFormat to IPortableDeviceKeyCollection, hr= 0x%lx\n", hrTemp);
            }

        }
    }

    // 5) Call GetValues() passing the collection of specified PROPERTYKEYs.
    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);
        }
    }

    // 6) Display the returned property values to the user
    if (SUCCEEDED(hr))
    {
        DisplayStringProperty(pObjectProperties, PKEY_GenericObj_ParentID,        NAME_GenericObj_ParentID);
        DisplayStringProperty(pObjectProperties, PKEY_GenericObj_Name,            NAME_GenericObj_Name);
        DisplayStringProperty(pObjectProperties, PKEY_GenericObj_PersistentUID,   NAME_GenericObj_PersistentUID);
        DisplayGuidProperty  (pObjectProperties, PKEY_GenericObj_ObjectFormat,    NAME_GenericObj_ObjectFormat);
    }
}

IPortableDeviceContent2

IPortableDeviceProperties

WpdServicesApiSample