Lecture des propriétés de l’appareil

Les applications utilisent l’interface IWiaPropertyStorage d’un appareil pour lire et écrire les propriétés de l’appareil. IWiaPropertyStorage hérite de toutes les méthodes de l’interface com (Component Object Model) IPropertyStorage.

Les propriétés de l’appareil incluent des informations sur un appareil qui décrivent les fonctionnalités et les paramètres de l’appareil. Pour obtenir la liste de ces propriétés, consultez Propriétés de l' appareil.

Parmi les propriétés d’appareil lues à l’aide de IWiaPropertyStorage , il s’agit de l’ID de l’appareil, qui est ensuite utilisé pour créer un appareil WIA (Windows Image Acquisition). Pour plus d’informations, consultez IWiaDevMgr :: CreateDevice (ou IWiaDevMgr2 :: CreateDevice).

L’exemple suivant lit l’ID de l’appareil, le nom de l’appareil et la description de l’appareil à partir du tableau des propriétés de l’appareil, puis imprime ces propriétés sur la console.

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

Dans cet exemple, l’application configure les tableaux PROPVARIANT (PropSpec et PropVar, respectivement) pour contenir les informations de propriété. Ces tableaux sont passés comme paramètres dans l’appel à la méthode IPropertyStorage :: ReadMultiple du pointeur IWiaPropertyStorage pIWiaPropStg. Chaque élément du tableau PropSpec contient le type et le nom d’une propriété d’appareil. Lors du retour, chaque élément de la PropVar contient la valeur de la propriété de l’appareil représentée par l’élément correspondant du tableau PropSpec .

L’application appelle ensuite la propriété IPropertyStorage :: ReadMultiple du pointeur IWiaPropertyStorage pWiaPropertyStorage pour récupérer les informations de propriété.

La technique utilisée pour lire et définir les propriétés de l’appareil est la même que pour les propriétés de l’élément, la seule différence est le type de l’élément WIA sur lequel vous appelez les méthodes appropriées. Pour obtenir la liste des propriétés des éléments, consultez Propriétés de l' élément.