如何使用 WIA C# 创建快速双面扫描?

How to create fast duplex scanning with WIA C#?

我是WIA新手。我被要求使扫描服务扫描速度更快和双面扫描。我目前的服务扫描一页,然后将其放入 pdf 等,直到少于 20 页(这个数字只是我之前使用的拐杖,如果有人解释如何获得 "if there is any paper in there" 变量,我会很高兴)。我开始挖掘并在 MSDN 上找到描述属性的文档,然后找到 this post describing duplex sanning, but with mysterious 5 in set. After I found this 并弄清楚我需要 WIA_DPS_DOCUMENT_HANDLING_SELECT 设置为 0x205(FEEDER + DUPLEX + AUTO_ADVANCE)。所以我试着像这样设置它们:

    private static void SetProperty(Property property, int value)
    {
        IProperty x = (IProperty)property;
        Object val = value;
        x.set_Value(ref val);
    }

...一些代码...

    foreach (Property prop in device.Properties)
    {
        //LOGGER.Warn(prop.Name);
        //LOGGER.Warn(prop.PropertyID);
        switch ((Int32)prop.PropertyID)
        {
           // Document Handling Select
           case 3088:
              SetProperty(prop, 517);
              break;
           // Pages
           case 3096:
              SetProperty(prop, 1);
              break;
        }
    }

它对我不起作用...它只是停留在设置...有人可以解释如何设置 AUTO_ADVANCE 和 DUPLEX 道具吗?或者 "make scanning faster and duplex" 需要的不仅仅是 AUTO_ADVANCE 和 DUPLEX,而我对它们的看法是错误的?或者我应该在我的扫描描述中考虑 "ISIS / TWAIN (Windows XP / Vista / 7 / 8 / 8.1 / 10)" 字符串并使用其他库?
(Window 10,佳能 DR-M160||、DR-M160 和 DR-M160II Windows 的驱动程序)

这里还有当前的获取函数:

    public List<ImageFile> FetchImageList()
    {
        List<ImageFile> imageList = new List<ImageFile>();
        //bool hasMorePages = true;
        int testcount = 0;
        while (testcount >= 0)
        {
            testcount--;
            WIA.Device device = FindDevice(_deviceId);
            if (device == null)
            {
                LOGGER.Warn("Scanner device not found");
                return null;
            }
            // get item
            WIA.Item scanItem = device.Items[1] as WIA.Item;
            LOGGER.Debug($"ScanItem: {scanItem.ItemID}");

            try
            {
                foreach (Property prop in device.Properties)
                {
                    //LOGGER.Warn(prop.Name);
                    //LOGGER.Warn(prop.PropertyID);
                    switch ((Int32)prop.PropertyID)
                    {
                        // Document Handling Select
                        case 3088:
                            LOGGER.Warn("here");
                            SetProperty(prop, 517);
                            LOGGER.Warn("here");
                            break;
                        // Pages
                        case 3096:
                            SetProperty(prop, 1);
                            break;
                    }
                }
                // scan image
                WIA.ICommonDialog wiaCommonDialog = new WIA.CommonDialog();
                WIA.ImageFile image = (WIA.ImageFile)scanItem.Transfer(WIA.FormatID.wiaFormatPNG);
                imageList.Add(image);
                LOGGER.Warn("Front");

                //get back side
                image = (WIA.ImageFile)scanItem.Transfer(WIA.FormatID.wiaFormatPNG);
                imageList.Add(image);
                LOGGER.Warn("Back");
            }
            catch (Exception e)
            {
                throw (e);
            }
        }
        return imageList;
    }

好吧...我尝试在没有 AUTO_ADVANCE 的情况下进行双面扫描,并在 Transfer 调用时得到 HRESULT: 0x8000FFFF (E_UNEXPECTED)。根据this post(尽管那是在Windows 7上)我想我无法通过使用WIA为我解决这个问题,仍然希望有其他建议...

已解决问题 我使用 saraff.twain 并且它对我有用: - git 页:https://github.com/saraff-9EB1047A4BEB4cef8506B29BA325BD5A/Saraff.Twain.NET 带有 grate wiki 页面的好库。(也有类似的 .net 4.6.1 库)