示例#1
0
        public static DataSource GetDefault(Identity applicationId, IWindowsMessageHook messageHook)
        {
            var defaultSourceId = new Identity();

            // Attempt to get information about the system default source
            var result = Twain32Native.DsmIdentity(
                applicationId,
                IntPtr.Zero,
                DataGroup.Control,
                DataArgumentType.Identity,
                Message.GetDefault,
                defaultSourceId);

            if (result != TwainResult.Success)
            {
                var status = DataSourceManager.GetConditionCode(applicationId, null);
                throw new TwainException("Error getting information about the default source: " + result, result, status);
            }

            return(new DataSource(applicationId, defaultSourceId, messageHook));
        }
示例#2
0
        public void OpenSource()
        {
            var result = Twain32Native.DsmIdentity(
                _applicationId,
                IntPtr.Zero,
                DataGroup.Control,
                DataArgumentType.Identity,
                Message.OpenDS,
                SourceId);

            if (result != TwainResult.Success)
            {
                var conditionCode = DataSourceManager.GetConditionCode(_applicationId, SourceId);
                _log.Debug(string.Format("OpenDS, result: {0}, conditionCode: {1}", result, conditionCode));
                throw new TwainException("Error opening data source", result, conditionCode);
            }

            _log.Debug("OpenDS, result: " + result);

            SourceState = TwainState.SourceOpen;
        }
示例#3
0
        public void Close()
        {
            var result = Twain32Native.DsmIdentity(
                _applicationId,
                IntPtr.Zero,
                DataGroup.Control,
                DataArgumentType.Identity,
                Message.CloseDS,
                SourceId);


            if (result != TwainResult.Failure)
            {
                _log.Debug(string.Format("CloseDS, result: {0}", result));
                SourceState = null;
            }
            else
            {
                var condition = DataSourceManager.GetConditionCode(_applicationId, SourceId);
                _log.Debug(string.Format("CloseDS, result: {0}, conditionCode: {1}", result, condition));
            }
        }
示例#4
0
 protected ConditionCode GetStatus()
 {
     return(DataSourceManager.GetConditionCode(_applicationId, _sourceId));
 }
示例#5
0
        private bool NegotiateArea(ScanSettings scanSettings)
        {
            var area = scanSettings.Area;

            if (area == null)
            {
                return(false);
            }

            try
            {
                var cap = new Capability(Capabilities.IUnits, TwainType.Int16, _applicationId, SourceId);
                if ((Units)cap.GetBasicValue().Int16Value != area.Units)
                {
                    Capability.SetCapability(Capabilities.IUnits, (short)area.Units, _applicationId, SourceId);
                }
            }
            catch
            {
                // Do nothing if the data source does not support the requested capability
                return(false);
            }

            float right;
            float bottom;

            float physicalHeight    = 0;
            var   physicalHeightCap = Capability.GetCapability(Capabilities.PhysicalHeight, _applicationId, SourceId);

            if (physicalHeightCap != null && physicalHeightCap.Count == 1)
            {
                physicalHeight = ValueConverter.ConvertToFix32(physicalHeightCap[0]);
            }

            float physicalWidth    = 0;
            var   physicalWidthCap = Capability.GetCapability(Capabilities.PhysicalWidth, _applicationId, SourceId);

            if (physicalWidthCap != null && physicalWidthCap.Count == 1)
            {
                physicalWidth = ValueConverter.ConvertToFix32(physicalWidthCap[0]);
            }

            right  = physicalWidth < area.Right ? physicalWidth : area.Right;
            bottom = physicalHeight < area.Bottom ? physicalHeight : area.Bottom;

            var imageLayout = new ImageLayout
            {
                Frame = new Frame
                {
                    Left   = new Fix32(area.Left),
                    Top    = new Fix32(area.Top),
                    Right  = new Fix32(right),
                    Bottom = new Fix32(bottom)
                }
            };



            var result = Twain32Native.DsImageLayout(
                _applicationId,
                SourceId,
                DataGroup.Image,
                DataArgumentType.ImageLayout,
                Message.Set,
                imageLayout);

            if (result != TwainResult.Success && result != TwainResult.CheckStatus)
            {
                var condition = DataSourceManager.GetConditionCode(_applicationId, SourceId);
                return(false);
                //throw new TwainException("DsImageLayout.GetDefault error", result, condition);
            }

            return(true);
        }