Чтение свойств устройства
Приложения используют интерфейс IWiaPropertyStorage устройства для чтения и записи свойств устройства. IWiaPropertyStorage наследует все методы интерфейса COM IPropertyStorage.
Свойства устройства включают сведения об устройстве, описывающие возможности и параметры устройства. Список этих свойств см. в разделе Свойства устройства.
Среди свойств устройства, которые считываются с помощью IWiaPropertyStorage , — идентификатор устройства, который затем используется для создания устройства приобретения образов Windows (WIA). Дополнительные сведения см. в разделе IWiaDevMgr::CreateDevice (или IWiaDevMgr2::CreateDevice).
Следующий пример считывает идентификатор устройства, имя устройства и описание устройства из массива свойств устройства и выводит эти свойства в консоль.
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 (PropSpec и PropVar соответственно) для хранения сведений о свойствах. Эти массивы передаются в качестве параметров в вызове метода IPropertyStorage::ReadMultipleуказателя IWiaPropertyStoragepIWiaPropStg. Каждый элемент массива PropSpec содержит тип и имя свойства устройства. При возврате каждый элемент PropVar содержит значение свойства устройства, представленное соответствующим элементом массива PropSpec .
Затем приложение вызывает свойство IPropertyStorage::ReadMultipleуказателя IWiaPropertyStoragepWiaPropertyStorage для получения сведений о свойстве.
Метод, используемый для чтения и задания свойств устройства, такой же, как и для свойств элемента. Единственное различие заключается в типе элемента WIA, для которого вызываются соответствующие методы. Список свойств элемента см. в разделе Свойства элемента.