시스템 디바이스 열거
IWiaDevMgr::EnumDeviceInfo(또는 IWiaDevMgr2::EnumDeviceInfo) 메서드를 사용하여 시스템에 설치된 WIA(Windows 이미지 획득) 디바이스를 열거합니다. 이 메서드는 디바이스의 속성에 대한 열거형 개체를 만들고 열거형 개체가 지원하는 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) 인터페이스의 instance 가리킵니다.
애플리케이션은 pWiaEnumDevInfo를 IEnumWIA_DEV_INFO 인터페이스에 대한 포인터 주소로 채우는 IWiaDevMgr(또는 IWiaDevMgr2) 포인터 pWiaDevMgr의 IWiaDevMgr::EnumDeviceInfo(또는 IWiaDevMgr2::EnumDeviceInfo) 메서드를 호출합니다.
호출이 성공하면 애플리케이션은 IEnumWIA_DEV_INFO 포인터의IEnumWIA_DEV_INFO::Reset 메서드를 호출합니다. pWiaEnumDevInfo 변수는 열거형이 처음에 시작되도록 합니다.
이 호출이 성공하면 애플리케이션은 메서드가 더 이상 S_OK 반환하지 않을 때까지 IEnumWIA_DEV_INFO 포인터 pWiaEnumDevInfo의 IEnumWIA_DEV_INFO::Next 메서드를 반복적으로 호출하여 시스템의 디바이스를 반복하며 열거가 완료되었음을 나타냅니다.
pWiaEnumDevInfo-Next>에 대한 각 호출은 특정 디바이스에 대한 속성 정보를 포함하는 IWiaPropertyStorage 인터페이스에 대한 포인터로 pWiaPropertyStorage를 채웁니다.