2011-08-16 3 views
7

WIA Сканирование с помощью устройства подачиWIA Сканирование с помощью фидера

Вот мои свойства устройства:

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

Вот мой пункт (страница) Свойства:

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 

я получил все работает гладко, если Я установил «Выбор обработки документов» на «2». Когда я устанавливаю его в «1» и запускаю его, как раз перед тем, как я говорю item.Transfer() (или item.Transfer (bmp/​​jpeg/pngGuid)), я получаю исключение «Значение не входит в ожидаемый диапазон».

Это настолько раздражает, какое значение? Я googled в Интернете, и я мог найти только небольшую информацию, но это не очень помогает.

+0

я играл больше с ним, и я обнаружил, что единственный способ, которым я мог бы использовать фидер был, открыв общий диалог, чтобы спросить «элемент». Метод в диалоговом окне запрашивает устройство. Он устанавливает свойства в устройстве и в элементе. У меня был взгляд в свойствах, и он выглядит так же, как и в моих вопросах. И это работает. Должно быть, я чего-то не вижу ... –

+0

У меня такая же проблема. :-(Я предполагаю, что должно быть другое свойство устройства, которое необходимо изменить. –

ответ

6

Я думаю, вам нужно установить свойство устройства «Страницы» (ID 3096) с 0 на 1, чтобы предотвратить исключение. Мне потребовалось некоторое время, чтобы понять это. Наконец, я нашел это свойство, сравнив свойства устройства до и после вызова CommonDialogClass.ShowSelectItems.

Вот код:

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); 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^