Freigeben über


Lesen von Geräteeigenschaften

Anwendungen verwenden die IWiaPropertyStorage-Schnittstelle eines Geräts, um Geräteeigenschaften zu lesen und zu schreiben. IWiaPropertyStorage erbt alle Methoden der COM-Schnittstelle (Component Object Model) IPropertyStorage.

Geräteeigenschaften enthalten Informationen zu einem Gerät, die die Funktionen und Einstellungen des Geräts beschreiben. Eine Liste dieser Eigenschaften finden Sie unter Geräteeigenschaften.

Zu den Geräteeigenschaften, die mit IWiaPropertyStorage gelesen werden, gehört die Geräte-ID, die dann zum Erstellen eines Windows Image Acquisition -Geräts (WIA) verwendet wird. Weitere Informationen finden Sie unter IWiaDevMgr::CreateDevice (oder IWiaDevMgr2::CreateDevice).

Im folgenden Beispiel werden die Geräte-ID, der Gerätename und die Gerätebeschreibung aus dem Array der Geräteeigenschaften gelesen und diese Eigenschaften an die Konsole ausgegeben.

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

In diesem Beispiel richtet die Anwendung PROPVARIANT-Arrays (PropSpec bzw . PropVar) ein, um Eigenschafteninformationen zu enthalten. Diese Arrays werden als Parameter im Aufruf der IPropertyStorage::ReadMultiple-Methode des IWiaPropertyStorage-ZeigerspIWiaPropStg übergeben. Jedes Element des PropSpec-Arrays enthält den Typ und den Namen einer Geräteeigenschaft. Nach der Rückgabe enthält jedes Element des PropVar den Wert der Geräteeigenschaft, die durch das entsprechende Element des PropSpec-Arrays dargestellt wird.

Die Anwendung ruft dann die IPropertyStorage::ReadMultiple-Eigenschaft des IWiaPropertyStorage-ZeigerspWiaPropertyStorage auf, um die Eigenschafteninformationen abzurufen.

Die Zum Lesen und Festlegen von Geräteeigenschaften verwendete Technik ist identisch mit der technik für Elementeigenschaften. Der einzige Unterschied ist der Typ des WIA-Elements, für das Sie die entsprechenden Methoden aufrufen. Eine Liste der Elementeigenschaften finden Sie unter Elementeigenschaften.