Enumerazione dei dispositivi di sistema
Usa il metodo IWiaDevMgr::EnumDeviceInfo (o IWiaDevMgr2::EnumDeviceInfo) per enumerare i dispositivi Windows Image Acquisition (WIA) installati in un sistema. Questo metodo crea un oggetto di enumerazione per le proprietà dei dispositivi e restituisce un puntatore all'interfaccia IEnumWIA_DEV_INFO supportata dall'oggetto di enumerazione.
È quindi possibile usare i metodi dell'interfaccia IEnumWIA_DEV_INFO per ottenere un puntatore all'interfaccia IWiaPropertyStorage per ogni dispositivo installato nel sistema.
Il codice seguente dell'applicazione di esempio WiaSSamp illustra come creare un oggetto di enumerazione per i dispositivi in un sistema e scorrere tali dispositivi:
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 è una costante WIA che rappresenta l'unico valore valido per questo parametro.
Nell'esempio il parametro pWiaDevMgr punta a un'istanza dell'interfaccia IWiaDevMgr (o IWiaDevMgr2) dopo una precedente chiamata a CoCreateInstance.
L'applicazione chiama il metodo IWiaDevMgr::EnumDeviceInfo (o IWiaDevMgr2::EnumDeviceInfo) del puntatore IWiaDevMgr (o IWiaDevMgr2) pWiaDevMgr che riempie pWiaEnumDevInfo con l'indirizzo di un puntatore all'interfaccia IEnumWIA_DEV_INFO .
Se la chiamata ha esito positivo, l'applicazione chiama il metodo IEnumWIA_DEV_INFO::Reset del puntatore IEnumWIA_DEV_INFO . La variabile pWiaEnumDevInfo garantisce che l'enumerazione inizi all'inizio.
Se la chiamata ha esito positivo, l'applicazione scorre i dispositivi nel sistema chiamando ripetutamente il metodo IEnumWIA_DEV_INFO::Next del puntatore IEnumWIA_DEV_INFO pWiaEnumDevInfo fino a quando il metodo non restituisce più S_OK, a indicare che l'enumerazione è stata completata.
Ogni chiamata a pWiaEnumDevInfo-Next> riempie pWiaPropertyStorage con un puntatore all'interfaccia IWiaPropertyStorage che contiene informazioni sulle proprietà per un dispositivo specifico.