ehm ... diciamo che la cosa mi sembrava simpatica da fare, quindi mi son messo e l'ho fatta 
Ho implementato una basilarissima classe, ma facilmente espandibile, che contiene all'interno 3 metodi:
- un metodo ListScanner che ti restituisce l'elenco degli scanner con le varie informazioni, senza però icone e/o simili, utile nel momento in cui devi fare la scansione senza UI
- un metodo per fare la scansione con la ui (si appoggia al metodo successivo)
- un metodo per fare la scansione senza ui
Come base per la "conversione" ho usato il link seguente (che implementa anche l'adf cosa che io non ho fatto)
http://miljenkobarbir.com/using-a-sc...ialogs-in-net/
Se cerchi su google le classi e/o i metodi utilizzati per le WIA trovi subito i link all'MSDN che è meraviglioso, basta solo prenderci la mano perché c'è veramente di tutto, per tutti i linguaggi microsoft, per tutti i sistemi operativi microsoft ... quindi se ci prendi la mano e non lo maledici eccessivamente all'inizio scoprirai quant'è bello 
NOTE:
- la gestione errori è minimale
- non l'ho testato su IIS, ma solo su Apache su Windows
- lo scanner, attualmente, non viene "configurato" quindi non so dirti cosa ti esce fuori ... però in uno dei link che ti ho postato prima c'era il codice necessario per configurare lo scanner
PS: ma se ti serve per una gestione documentale, non sarebbe più comodo farla fare direttamente al client?
codice:
<?php
class WIA
{
const WIADEVICETYPE_UNSPECIFIEDDEVICETYPE = 0;
const WIADEVICETYPE_SCANNERDEVICETYPE = 1;
const WIADEVICETYPE_CAMERADEVICETYPE = 2;
const WIADEVICETYPE_VIDEODEVICETYPE = 3;
const WIAFORMATID_BMP = '{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}';
const WIAFORMATID_PNG = '{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}';
const WIAFORMATID_GIF = '{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}';
const WIAFORMATID_JPEG = '{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}';
const WIAFORMATID_TIFF = '{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}';
function __construct()
{
// Si assicura che le librerie siano caricate
com_load_typelib("WIA.Image");
com_load_typelib("WIA.Vector");
com_load_typelib("WIA.Device");
com_load_typelib("WIA.Item");
com_load_typelib("WIA.CommonDialog");
com_load_typelib("WIA.DeviceManager");
}
function ListDevices()
{
$scanners = array();
// Instanzia il device manager
$deviceManager = new COM("WIA.DeviceManager");
// Cicla i device
foreach($deviceManager->DeviceInfos as $deviceInfo)
{
$scanner = new stdClass();
$scanner->Id = $deviceInfo->DeviceID;
$scanner->Name = $deviceInfo->Properties("Name")->Value;
$scanner->Manufacturer = $deviceInfo->Properties("Manufacturer")->Value;
$scanner->Port = $deviceInfo->Properties("Port")->Value;
$scanner->Type = $deviceInfo->Properties("Type")->Value;
$scanners[] = $scanner;
unset($scanner);
}
return $scanners;
}
function ScanWithoutUi($DeviceId, $FormatId, $SavePath)
{
$selectedDevice = null;
// Instanzia le classi necessarie (common dialog e device manager)
$commonDialogClass = new COM("WIA.CommonDialog");
$deviceManager = new COM("WIA.DeviceManager");
// Cicla i device
foreach($deviceManager->DeviceInfos as $deviceInfo)
{
if ($DeviceId == $deviceInfo->DeviceID)
{
// Si collega allo scanner
$selectedDevice = $deviceInfo->Connect();
break;
}
}
if ($selectedDevice == null)
{
return false;
}
// Acquisisce il primo scanner in elenco
$selectedDeviceItem = $selectedDevice->Items[1];
// Avvia la scansione
$scannedImage = $commonDialogClass->ShowTransfer($selectedDeviceItem, $FormatId, false);
if ($scannedImage == false)
{
return false;
}
$scannedImage->SaveFile($SavePath);
return true;
// come implementare la scansione con il supporto all'adf (pagine multiple)
// http://miljenkobarbir.com/using-a-sc...ialogs-in-net/
}
function ScanWithUi($FormatId, $SavePath)
{
// Instanzia la classe
$commonDialogClass = new COM("WIA.CommonDialog");
// Acquisisce l'elenco dei device
$device = $commonDialogClass->ShowSelectDevice(self::WIADEVICETYPE_UNSPECIFIEDDEVICETYPE, true, false);
if ($device == false)
{
return false;
}
return $this->ScanWithoutUi($device->DeviceID, $FormatId, $SavePath);
}
}
$wia = new WIA();
echo '<pre>';
var_dump($wia->ListDevices());
echo '</pre>';
var_dump($wia->ScanWithoutUi("{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\\0000", WIA::WIAFORMATID_JPEG, "C:\scan.jpg"));
?>