システム デバイスの列挙
システムにインストールされている Windows イメージ取得 (WIA) デバイスを列挙するには、IWiaDevMgr::EnumDeviceInfo (または IWiaDevMgr2::EnumDeviceInfo) メソッドを使用します。 このメソッドは、デバイスのプロパティの列挙オブジェクトを作成し、列挙オブジェクトがサポートする IEnumWIA_DEV_INFO インターフェイスへのポインターを返します。
その後、 IEnumWIA_DEV_INFO インターフェイスのメソッドを使用して、システムにインストールされている各デバイスの IWiaPropertyStorage インターフェイス ポインターを取得できます。
WiaSSamp サンプル アプリケーションの次のコードは、システム上のデバイスの列挙オブジェクトを作成し、それらのデバイスを反復処理する方法を示しています。
HRESULT EnumerateWiaDevices( IWiaDevMgr *pWiaDevMgr ) //XP or earlier
HRESULT EnumerateWiaDevices( IWiaDevMgr2 *pWiaDevMgr ) //Vista or later
{
//
// Validate arguments
//
if (NULL == pWiaDevMgr)
{
return E_INVALIDARG;
}
//
// Get a device enumerator interface
//
IEnumWIA_DEV_INFO *pWiaEnumDevInfo = NULL;
HRESULT hr = pWiaDevMgr->EnumDeviceInfo( WIA_DEVINFO_ENUM_LOCAL, &pWiaEnumDevInfo );
if (SUCCEEDED(hr))
{
//
// Loop until you get an error or pWiaEnumDevInfo->Next returns
// S_FALSE to signal the end of the list.
//
while (S_OK == hr)
{
//
// Get the next device's property storage interface pointer
//
IWiaPropertyStorage *pWiaPropertyStorage = NULL;
hr = pWiaEnumDevInfo->Next( 1, &pWiaPropertyStorage, NULL );
//
// pWiaEnumDevInfo->Next will return S_FALSE when the list is
// exhausted, so check for S_OK before using the returned
// value.
//
if (hr == S_OK)
{
//
// Do something with the device's IWiaPropertyStorage*
//
//
// Release the device's IWiaPropertyStorage*
//
pWiaPropertyStorage->Release();
pWiaPropertyStorage = NULL;
}
}
//
// If the result of the enumeration is S_FALSE (which
// is normal), change it to S_OK.
//
if (S_FALSE == hr)
{
hr = S_OK;
}
//
// Release the enumerator
//
pWiaEnumDevInfo->Release();
pWiaEnumDevInfo = NULL;
}
//
// Return the result of the enumeration
//
return hr;
}
WIA_DEVINFO_ENUM_LOCALは、このパラメーターの唯一の有効な値を表す WIA 定数です。
この例では、パラメーター pWiaDevMgr は、CoCreateInstance の前回の呼び出しの後に IWiaDevMgr (または IWiaDevMgr2) インターフェイスのインスタンスを指しています。
アプリケーションは、pWiaEnumDevInfo に IEnumWIA_DEV_INFO インターフェイスへのポインターのアドレスを入力する IWiaDevMgr (または IWiaDevMgr2) ポインター pWiaDevMgr の IWiaDevMgr::EnumDeviceInfo (または IWiaDevMgr2::EnumDeviceInfo) メソッドを呼び出します。
呼び出しが成功した場合、アプリケーションはIEnumWIA_DEV_INFO ポインターのIEnumWIA_DEV_INFO::Reset メソッドを呼び出します。 pWiaEnumDevInfo 変数を使用すると、列挙が先頭から開始されます。
この呼び出しが成功した場合、アプリケーションは、IEnumWIA_DEV_INFO ポインターpWiaEnumDevInfo の IEnumWIA_DEV_INFO::Next メソッドを繰り返し呼び出して、メソッドがS_OKを返さなくなるまで繰り返し呼び出し、列挙が完了したことを示します。
pWiaEnumDevInfo-Next> の各呼び出しは、特定のデバイスのプロパティ情報を含む IWiaPropertyStorage インターフェイスへのポインターで pWiaPropertyStorage を埋めます。