读取设备属性
应用程序使用设备的 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;
}
在此示例中,应用程序分别 (PropSpec 和 PropVar 设置 PROPVARIANT 数组,) 来保存属性信息。 在调用 IWiaPropertyStorage 指针 pIWiaPropStg 的 IPropertyStorage::ReadMultiple 方法时,这些数组作为参数传递。 PropSpec 数组的每个元素都包含设备属性的类型和名称。 返回时, PropVar 的每个元素都包含由 PropSpec 数组的对应元素表示的设备属性的值。
然后,应用程序调用 IWiaPropertyStorage 指针 pWiaPropertyStorage 的 IPropertyStorage::ReadMultiple 属性来检索属性信息。
用于读取和设置设备属性的技术与项属性的技术相同,唯一的区别是调用相应方法的 WIA 项的类型。 有关项属性的列表,请参阅 项属性。