Lecture des propriétés de l’appareil
Les applications utilisent l’interface IWiaPropertyStorage d’un appareil pour lire et écrire des propriétés d’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 de l’appareil lues à l’aide d’IWiaPropertyStorage figure l’ID de l’appareil, qui est ensuite utilisé pour créer un appareil d’acquisition d’images Windows (WIA). 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 de propriétés de l’appareil, puis imprime ces propriétés dans 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 des tableaux PROPVARIANT (respectivement PropSpec et PropVar) pour qu’ils contiennent les informations de propriété. Ces tableaux sont passés en tant que paramètres dans l’appel à la méthode IPropertyStorage::ReadMultiple du pointeur IWiaPropertyStoragepIWiaPropStg. Chaque élément du tableau PropSpec contient le type et le nom d’une propriété d’appareil. Au retour, chaque élément du PropVar contient la valeur de la propriété d’appareil représentée par l’élément correspondant du tableau PropSpec .
L’application appelle ensuite la propriété IPropertyStorage::ReadMultiple du pointeur IWiaPropertyStoragepWiaPropertyStorage 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 celle des propriétés d’é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 d’élément, consultez Propriétés de l’élément.