2011-08-16 12 views
7

WIA Scansione tramite alimentatoreWIA Scansione tramite alimentatore

Qui è la mia proprietà del dispositivo:

Document Handling Select = 1 (2 is for flatbed, and 1 is for the feeder.) 

Qui è la mia voce (pagina) proprietà:

Horizontal Resolution = 150 
Vertical Resolution = 150 
Horizontal Extent = 500 (I want to get it first to work, then I'll play with the extents.), 
Vertical Extent = 500 
Bits Per Pixel = 8 
Current Intent = 4 

mi sono tutto senza intoppi, se Ho impostato "Selezione gestione documenti" su "2". Quando l'ho impostato su "1", e l'ho eseguito, appena prima di dire item.Transfer() (o item.Transfer (bmp/​​jpeg/pngGuid)) ottengo l'eccezione "Il valore non rientra nell'intervallo previsto."

Questo è così fastidioso, che valore? Ho cercato su Google il Web e sono riuscito a trovare solo poche informazioni, ma non è di grande aiuto.

+0

ho giocato di più con esso, e ho trovato che l'unico modo che ho potuto utilizzare l'alimentatore è stato aprendo la finestra di dialogo comune per chiedere la "voce". Il metodo nella finestra di dialogo richiede un dispositivo. Imposta le proprietà nel dispositivo e nell'elemento. Ho dato un'occhiata alle proprietà e sembra uguale alle mie domande. E funziona. Deve esserci qualcosa che non vedo ... –

+0

Ho lo stesso problema. :-(Suppongo che ci debba essere un'altra proprietà del dispositivo che deve essere modificata. –

risposta

6

Penso che sia necessario impostare la proprietà del dispositivo "Pagine" (ID 3096) da 0 a 1 per evitare l'eccezione. Mi ci è voluto un po 'di tempo per capirlo. Infine, ho trovato questa proprietà confrontando le proprietà del dispositivo prima e dopo una chiamata a CommonDialogClass.ShowSelectItems.

Ecco il codice:

public enum DeviceDocumentHandling : int 
    { 
     Feeder = 1, 
     FlatBed = 2 
    } 

    const int DEVICE_PROPERTY_DOCUMENT_HANDLING_CAPABILITIES_ID = 3086; 
    const int DEVICE_PROPERTY_DOCUMENT_HANDLING_STATUS_ID = 3087; 
    const int DEVICE_PROPERTY_DOCUMENT_HANDLING_SELECT_ID = 3088; 
    const int DEVICE_PROPERTY_PAGES_ID = 3096; 

    public static Property FindProperty(WIA.Properties properties, 
             int propertyId) 
    { 
     foreach (Property property in properties) 
      if (property.PropertyID == propertyId) 
       return property; 
     return null; 
    } 

    public static void SetDeviceProperty(Device device, int propertyId, 
             object value) 
    { 
     Property property = FindProperty(device.Properties, propertyId); 
     if (property != null) 
      property.set_Value(value); 
    } 

    public static object GetDeviceProperty(Device device, int propertyId) 
    { 
     Property property = FindProperty(device.Properties, propertyId); 
     return property != null ? property.get_Value() : null; 
    } 

    public static void SelectDeviceDocumentHandling(Device device, 
           DeviceDocumentHandling handling) 
    { 
     int requested = (int)handling; 
     int supported = (int)GetDeviceProperty(device, 
       DEVICE_PROPERTY_DOCUMENT_HANDLING_CAPABILITIES_ID); 
     if ((requested & supported) != 0) 
     { 
      if ((requested & (int)DeviceDocumentHandling.Feeder) != 0) 
       SetDeviceProperty(device, DEVICE_PROPERTY_PAGES_ID, 1); 
      SetDeviceProperty(device, 
        DEVICE_PROPERTY_DOCUMENT_HANDLING_SELECT_ID, requested); 
     } 
    }