예제 #1
0
        /// <summary>
        /// Are there any images left? Are you using a Duplex or AutomaticDocumentFeeder scanner?
        /// </summary>
        public bool HasMorePages()
        {
            bool hasMorePages = false;

            if (_scannerSettings.IsDuplex || _scannerSettings.IsAutomaticDocumentFeeder)
            {
                var status = _wiaScannerDeviceSettings.GetPropertyValue <int>("Document Handling Status");
                hasMorePages = (status & WiaDpsDocumentHandlingStatus.FEED_READY) != 0;
            }
            return(hasMorePages);
        }
예제 #2
0
        /// <summary>
        /// Lists the connected scanners to the system.
        /// </summary>
        public static IList <ScannerSettings> GetScannerDevices()
        {
            var scanners    = new List <ScannerSettings>();
            var deviceInfos = new DeviceManager().DeviceInfos;

            for (var i = 1; i <= deviceInfos.Count; i++) // Using a regular for loop to avoid `System.IO.FileNotFoundException: Could not load file or assembly CustomMarshalers` in .NET Core 2x apps.
            {
                var info = deviceInfos[i];
                if (info.Type != WiaDeviceType.ScannerDeviceType)
                {
                    continue;
                }

                var device  = info.Connect();
                var scanner = device.Items[1];

                var wiaSettings     = new WiaSettings(device.Properties);
                var defaultSettings = new WiaSettings(scanner.Properties);

                var caps = wiaSettings.GetPropertyValue <int>("Document Handling Capabilities");
                scanners.Add(new ScannerSettings
                {
                    Name = info.Properties["Description"].get_Value().ToString(),
                    Id   = info.DeviceID,
                    SupportedResolutions      = getAvailableResolutions(defaultSettings),
                    ScannerDeviceSettings     = wiaSettings.ExtendedProperties,
                    ScannerPictureSettings    = defaultSettings.ExtendedProperties,
                    IsAutomaticDocumentFeeder = (caps & (int)WiaDpsDocumentHandlingSelect.FEEDER) != 0,
                    IsDuplex                 = (caps & (int)WiaDpsDocumentHandlingSelect.DUPLEX) != 0,
                    IsFlatbed                = (caps & (int)WiaDpsDocumentHandlingSelect.FLATBED) != 0,
                    SupportedEvents          = getDeviceEvents(device.Events),
                    SupportedTransferFormats = getSupportedTransferFormats(scanner)
                });

                Marshal.ReleaseComObject(device);
                Marshal.ReleaseComObject(scanner);
            }
            return(scanners);
        }