using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using System.Drawing.Imaging; 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; } biz_engine_prepare.prepare(); // 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) { twain32_events._twain32_AcquireCompleted(null, null); //this.close(); } 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) { config_environment.scan_state = false; biz_scanHistory.end_new(); biz_scanFinish.Work(null, new ResponseEntity() { Status = 0, Message = "发生错误" }); biz_scanFinishBatch.Work(3, true); } 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) { try { var stream = e.GetNativeImageStream(); Image img = Image.FromStream(stream); var fileInfo = file_manager.get_file_info2(); var file = fileInfo.file_full_name.Replace("bmp", "jpeg"); img.Save(file, ImageFormat.Jpeg); //if (config_environment.scan_state) { biz_scanHistory.add_history(); file_manager.save(file); } } catch (Exception ex) { LogManager.WriteLog(ex); } } public void close() { try { source.Close(); session.Close(); } catch (Exception ee) { LogManager.WriteLog(ee); } } } }