次の方法で共有


デバイスのプロパティの読み取り

アプリケーションでは、デバイスの IWiaPropertyStorage インターフェイスを使用して、デバイスのプロパティの読み取りと書き込みを行います。 IWiaPropertyStorage は、コンポーネント オブジェクト モデル (COM) インターフェイス IPropertyStorage のすべてのメソッドを継承します。

デバイスのプロパティには、デバイスの機能と設定を説明するデバイスに関する情報が含まれます。 これらのプロパティの一覧については、「 デバイスのプロパティ」を参照してください。

IWiaPropertyStorage を使用して読み取るデバイス プロパティの中には、デバイス ID があり、Windows イメージ取得 (WIA) デバイスの作成に使用されます。 詳細については、「 IWiaDevMgr::CreateDevice (または IWiaDevMgr2::CreateDevice)」を参照してください。

次の例では、デバイス プロパティの配列からデバイス ID、デバイス名、およびデバイスの説明を読み取り、これらのプロパティをコンソールに出力します。

    HRESULT ReadSomeWiaProperties( IWiaPropertyStorage *pWiaPropertyStorage )
    {
        //
        // Validate arguments
        //
        if (NULL == pWiaPropertyStorage)
        {
            return E_INVALIDARG;
        }

        //
        // Declare PROPSPECs and PROPVARIANTs, and initialize them to zero.
        //
        PROPSPEC PropSpec[3] = {0};
        PROPVARIANT PropVar[3] = {0};

        //
        // How many properties are you querying for?
        //
        const ULONG c_nPropertyCount = sizeof(PropSpec)/sizeof(PropSpec[0]);

        //
        // Define which properties you want to read:
        // Device ID.  This is what you would use to create
        // the device.
        //
        PropSpec[0].ulKind = PRSPEC_PROPID;
        PropSpec[0].propid = WIA_DIP_DEV_ID;

        //
        // Device Name
        //
        PropSpec[1].ulKind = PRSPEC_PROPID;
        PropSpec[1].propid = WIA_DIP_DEV_NAME;

        //
        // Device description
        //
        PropSpec[2].ulKind = PRSPEC_PROPID;
        PropSpec[2].propid = WIA_DIP_DEV_DESC;

        //
        // Ask for the property values
        //
        HRESULT hr = pWiaPropertyStorage->ReadMultiple( c_nPropertyCount, PropSpec, PropVar );
        if (SUCCEEDED(hr))
        {
            //
            // IWiaPropertyStorage::ReadMultiple will return S_FALSE if some
            // properties could not be read, so you have to check the return
            // types for each requested item.
            //

            //
            // Check the return type for the device ID
            //
            if (VT_BSTR == PropVar[0].vt)
            {
                //
                // Do something with the device ID
                //
                _tprintf( TEXT("WIA_DIP_DEV_ID: %ws\n"), PropVar[0].bstrVal );
            }

            //
            // Check the return type for the device name
            //
            if (VT_BSTR == PropVar[1].vt)
            {
                //
                // Do something with the device name
                //
                _tprintf( TEXT("WIA_DIP_DEV_NAME: %ws\n"), PropVar[1].bstrVal );
            }

            //
            // Check the return type for the device description
            //
            if (VT_BSTR == PropVar[2].vt)
            {
                //
                // Do something with the device description
                //
                _tprintf( TEXT("WIA_DIP_DEV_DESC: %ws\n"), PropVar[2].bstrVal );
            }

            //
            // Free the returned PROPVARIANTs
            //
            FreePropVariantArray( c_nPropertyCount, PropVar );
        }

        //
        // Return the result of reading the properties
        //
        return hr;
    }

この例では、アプリケーションはプロパティ情報を保持するように PROPVARIANT 配列 (PropSpecPropVar それぞれ) を設定します。 これらの配列は、IWiaPropertyStorage ポインター pIWiaPropStg の IPropertyStorage::ReadMultiple メソッドの呼び出しでパラメーターとして渡されます。 PropSpec 配列の各要素には、デバイス プロパティの型と名前が含まれています。 戻り時に、 PropVar の各要素には、 PropSpec 配列の対応する要素によって表される device プロパティの値が含まれます。

その後、アプリケーションは IWiaPropertyStorage ポインター pWiaPropertyStorage の IPropertyStorage::ReadMultiple プロパティを呼び出して、プロパティ情報を取得します。

デバイス プロパティの読み取りと設定に使用される手法は、項目プロパティの場合と同じです。唯一の違いは、適切なメソッドを呼び出す WIA アイテムの種類です。 アイテム プロパティの一覧については、「 Item Properties」を参照してください。