using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NTwain; using NTwain.Data; using HXX.Scanner.Common; using HXX.Scanner.Biz.Socket; namespace HXX.Scanner.Biz { public class biz_pop2 { private DataSource source = null; private TwainSession session = null; private bool flag = false; public void scan(Device_Scanner scanner,System.Windows.Forms.Form main_window) { session = new TwainSession(DataGroups.Image); session.DataTransferred += Session_DataTransferred; session.DeviceEvent += Session_DeviceEvent; session.SourceChanged += Session_SourceChanged; session.TransferCanceled += Session_TransferCanceled; session.TransferError += Session_TransferError; session.TransferReady += Session_TransferReady; session.PropertyChanged += Session_PropertyChanged; session.SourceDisabled += Session_SourceDisabled; session.StateChanged += Session_StateChanged; session.Open(); // 2. 获取设备列表(3.7.6 官方唯一方式) var sources = session.GetSources(); //source = sources[index]; foreach(var ss in sources) { if (ss.Name == scanner.deviceName) { source = ss; } } // 3. 选择设备(用默认扫描仪,不弹选择框) //DataSource source = sources.FirstOrDefault(); if (source == null) { //MessageBox.Show("未找到扫描仪"); session.Close(); return; } // 4. 打开设备 source.Open(); // 5. 弹出驱动设置窗口(你要的功能!) source.Enable(SourceEnableMode.ShowUI, false, main_window.Handle); // 6. 关闭 //source.Close(); //session.Close(); } private void Session_StateChanged(object sender, EventArgs e) { if (session.State >= 5) { flag = true; } if (flag) { if (session.State == 4) { try { source.Close(); session.Close(); } catch (Exception ee) { } } } } private void Session_SourceDisabled(object sender, EventArgs e) { var aa = 1; } private void Session_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { var nn = e.PropertyName; var aa = 1; } private void Session_TransferReady(object sender, TransferReadyEventArgs e) { var aa = 1; } private void Session_TransferError(object sender, TransferErrorEventArgs e) { var aa = 1; } private void Session_TransferCanceled(object sender, TransferCanceledEventArgs e) { var aa = 1; } private void Session_SourceChanged(object sender, EventArgs e) { var aa = 1; } private void Session_DeviceEvent(object sender, DeviceEventArgs e) { var aa = 1; } private void Session_DataTransferred(object sender, DataTransferredEventArgs e) { var aa = 1; } public void close() { try { source.Close(); session.Close(); } catch (Exception ee) { LogManager.WriteLog(ee); } } } }