private void CloseDS()
 {
     DisableDS();
     if ((twainState & TwainStateFlag.DSOpen) != 0)
     {
         if (tw.DsmIdentity(appId, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.CloseDS, sources[CurrentScanner]) == TwRC.Success)
         {
             twainState &= ~TwainStateFlag.DSOpen;
         }
         else
         {
             throw new Exception(GetTwainStatus());
         }
     }
 }
        private TwRC OpenDS()
        {
            CloseDS();
            TwRC rc = tw.DsmIdentity(appId, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.OpenDS, sources[CurrentScanner]);

            if (rc == TwRC.Success)
            {
                twainState |= TwainStateFlag.DSOpen;
            }
            else
            {
                throw new Exception(GetTwainStatus());
            }
            return(rc);
        }
 private void CloseDSM()
 {
     CloseDS();
     if ((twainState & TwainStateFlag.DSMOpen) != 0)
     {
         if (tw.DsmParent(appId, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.CloseDSM, ref hwnd) == TwRC.Success)
         {
             twainState &= ~TwainStateFlag.DSMOpen;
         }
         else
         {
             throw new Exception(GetTwainStatus());
         }
     }
     appId.Id = 0;
 }
        private TwRC SetCapability()
        {
            TwCapability cap = new TwCapability(TwCap.XferCount, 1, TwType.Int16);
            TwRC         rc  = tw.DsCapability(appId, sources[CurrentScanner], TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);

            if (rc != TwRC.Success)
            {
                CloseDS();
                throw new Exception(GetTwainStatus());
            }
            else
            {
                twainState |= TwainStateFlag.DSReady;
            }
            return(rc);
        }
        private TwRC OpenDSM()
        {
            CloseDSM();
            TwRC rc = tw.DsmParent(appId, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.OpenDSM, ref hwnd);

            if (rc == TwRC.Success)
            {
                twainState |= TwainStateFlag.DSMOpen;
                GetAllSorces();
                CurrentScanner = DefaultScanner;
            }
            else
            {
                throw new Exception(GetTwainStatus());
            }
            return(rc);
        }
 private void DisableDS()
 {
     if ((twainState & TwainStateFlag.DSEnabled) != 0)
     {
         TwUserInterface guif = new TwUserInterface()
         {
             ParentHand = hwnd,
             ShowUI     = false
         };
         if (tw.DsUserinterface(appId, sources[CurrentScanner], TwDG.Control, TwDAT.UserInterface, TwMSG.DisableDS, guif) == TwRC.Success)
         {
             twainState &= ~TwainStateFlag.DSEnabled;
         }
         else
         {
             throw new Exception(GetTwainStatus());
         }
     }
 }
        private TwRC EnableDS()
        {
            TwRC rc = SetCapability();

            if (rc == TwRC.Success)
            {
                TwUserInterface guif = new TwUserInterface()
                {
                    ShowUI     = false,
                    ModalUI    = true,
                    ParentHand = hwnd
                };
                rc = tw.DsUserinterface(appId, sources[CurrentScanner], TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif);
                if (rc == TwRC.Success)
                {
                    twainState |= TwainStateFlag.DSEnabled;
                }
                else
                {
                    throw new Exception(GetTwainStatus());
                }
            }
            return(rc);
        }