scanner_manager.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace HXX.Scanner.Biz
  8. {
  9. /// <summary>
  10. /// 扫描仪相关
  11. /// </summary>
  12. public class scanner_manager
  13. {
  14. static scanner_manager()
  15. {
  16. scanner_list = new List<Device_Scanner>();
  17. tw_scanner_list = new List<Device_Scanner>();
  18. }
  19. /// <summary>
  20. /// 可用扫描仪列表
  21. /// </summary>
  22. private static List<Device_Scanner> scanner_list { get; set; }
  23. /// <summary>
  24. /// tw读出的扫描仪列表
  25. /// </summary>
  26. private static List<Device_Scanner> tw_scanner_list { get; set; }
  27. /// <summary>
  28. /// 可用扫描仪列表
  29. /// </summary>
  30. public static List<Device_Scanner> Scanner_List
  31. {
  32. get
  33. {
  34. return scanner_list;
  35. }
  36. }
  37. /// <summary>
  38. /// 根据name获取扫描仪
  39. /// </summary>
  40. /// <param name="scanner_name"></param>
  41. /// <returns></returns>
  42. public static Device_Scanner get_scanner(string scanner_name)
  43. {
  44. return scanner_list.FirstOrDefault(x => x.deviceName == scanner_name);
  45. }
  46. /// <summary>
  47. /// 根据下标获取扫描仪
  48. /// </summary>
  49. /// <param name="source_index"></param>
  50. /// <returns></returns>
  51. public static Device_Scanner get_scanner(int source_index)
  52. {
  53. return scanner_list.FirstOrDefault(x => x.dsIndex == source_index);
  54. }
  55. /// <summary>
  56. /// 获取当前激活的扫描仪
  57. /// </summary>
  58. /// <returns></returns>
  59. public static Device_Scanner get_current()
  60. {
  61. return scanner_list.FirstOrDefault(x => x.openSourceReady);
  62. }
  63. /// <summary>
  64. /// 设置激活的扫描仪
  65. /// </summary>
  66. /// <param name="source_index"></param>
  67. public static void set_current(int source_index)
  68. {
  69. foreach (var scanner in scanner_list)
  70. {
  71. if (scanner.dsIndex == source_index)
  72. {
  73. scanner.openSourceReady = true;
  74. scanner.isActive = 1;
  75. }
  76. else
  77. {
  78. scanner.openSourceReady = false;
  79. scanner.isActive = 0;
  80. }
  81. }
  82. }
  83. /// <summary>
  84. /// 设置被选中的扫描仪
  85. /// </summary>
  86. /// <param name="source_index"></param>
  87. public static void set_chosen(int source_index)
  88. {
  89. foreach (var scanner in scanner_list)
  90. {
  91. if (scanner.dsIndex == source_index)
  92. {
  93. scanner.isChoose = true;
  94. }
  95. else
  96. {
  97. scanner.isChoose = false;
  98. }
  99. }
  100. }
  101. /// <summary>
  102. /// 增加一台扫描仪(tw初始化用)
  103. /// </summary>
  104. /// <param name="scanner"></param>
  105. public static void Add(Device_Scanner scanner)
  106. {
  107. tw_scanner_list.Add(scanner);
  108. }
  109. /// <summary>
  110. /// 扫描仪列表清空
  111. /// </summary>
  112. public static void Clear()
  113. {
  114. scanner_list.Clear();
  115. tw_scanner_list.Clear();
  116. }
  117. /// <summary>
  118. /// 读取真正的扫描仪列表
  119. /// </summary>
  120. /// <returns></returns>
  121. private static List<Device_Scanner> get_final_list()
  122. {
  123. //获取从usb读取到的扫描仪
  124. var usb_list = biz_usb.get_active();
  125. reload_base_list_when_panasonic(usb_list);
  126. List<Device_Scanner> result_list = new List<Device_Scanner>();
  127. //把usb列表和tw列表做交集
  128. foreach (var s in usb_list)
  129. {
  130. if (s.ToUpper().Contains("CANON"))
  131. {
  132. var temp_list = tw_scanner_list.Where(x => x.deviceName.ToUpper().Contains("CANON")).ToList();
  133. result_list.AddRange(temp_list);
  134. }
  135. else if (s.ToUpper().Contains("KODAK"))
  136. {
  137. var temp_list = tw_scanner_list.Where(x => x.deviceName.ToUpper().Contains("KODAK")).ToList();
  138. result_list.AddRange(temp_list);
  139. }
  140. else if (s.ToUpper().Contains("PANASONIC"))
  141. {
  142. var temp_list = tw_scanner_list.Where(x => x.deviceName.ToUpper().Contains("PANASONIC")).ToList();
  143. result_list.AddRange(temp_list);
  144. }
  145. else if (s.ToUpper().Contains("KV-"))
  146. {
  147. var temp_list = tw_scanner_list.Where(x => x.deviceName.ToUpper().Contains("PANASONIC")).ToList();
  148. result_list.AddRange(temp_list);
  149. }
  150. else if (s.ToUpper().Contains("HUAGO"))
  151. {
  152. var temp_list = tw_scanner_list.Where(x => x.deviceName.ToUpper().Contains("HUAGO")).ToList();
  153. if (s.Contains("100"))
  154. {
  155. temp_list = temp_list.Where(x => x.deviceName.Contains("100")).ToList();
  156. }
  157. else if (s.Contains("200"))
  158. {
  159. temp_list = temp_list.Where(x => x.deviceName.Contains("200")).ToList();
  160. }
  161. else if (s.Contains("300"))
  162. {
  163. temp_list = temp_list.Where(x => x.deviceName.Contains("300")).ToList();
  164. }
  165. else if (s.Contains("400"))
  166. {
  167. temp_list = temp_list.Where(x => x.deviceName.Contains("400")).ToList();
  168. }
  169. result_list.AddRange(temp_list);
  170. }
  171. else if (s.ToUpper().Contains("EPSON"))
  172. {
  173. var temp_list = tw_scanner_list.Where(x => x.deviceName.ToUpper().Contains("EPSON")).ToList();
  174. result_list.AddRange(temp_list);
  175. }
  176. //else if (s.ToUpper().Contains("HP"))
  177. //{
  178. // var temp_list = tw_scanner_list.Where(x => x.deviceName.ToUpper().Contains("HP")).ToList();
  179. // result_list.AddRange(temp_list);
  180. //}
  181. }
  182. if (tw_scanner_list.Count(x => x.deviceName.ToUpper().Contains("HP")) > 0)
  183. {
  184. var temp_list = tw_scanner_list.Where(x => x.deviceName.ToUpper().Contains("HP")).ToList();
  185. result_list.AddRange(temp_list);
  186. }
  187. return result_list;
  188. }
  189. /// <summary>
  190. /// 刷新扫描仪列表
  191. /// </summary>
  192. /// <returns></returns>
  193. public static bool refresh_scanner_list()
  194. {
  195. bool result = false;
  196. //var new_list = get_final_list();
  197. var new_list = tw_scanner_list;
  198. var f1 = true;
  199. var f2 = true;
  200. //foreach (var s in new_list)
  201. for (int i = 0; i < new_list.Count; i++)
  202. {
  203. var t = scanner_list.FirstOrDefault(x => x.deviceName == new_list[i].deviceName);
  204. if (t == null)
  205. {
  206. f1 = false;
  207. //break;
  208. }
  209. else
  210. {
  211. //new_list[i] = t;
  212. }
  213. }
  214. foreach (var s in scanner_list)
  215. {
  216. var t = new_list.FirstOrDefault(x => x.deviceName == s.deviceName);
  217. if (t == null)
  218. {
  219. f2 = false;
  220. break;
  221. }
  222. }
  223. result = f1 && f2;
  224. if (result)
  225. {
  226. //ok
  227. }
  228. else
  229. {
  230. scanner_list = new_list;
  231. set_current(-1);
  232. }
  233. return result;
  234. }
  235. /// <summary>
  236. /// 发现松下时,刷新tw列表。因为松下机除非插电,否则不出现在tw列表中
  237. /// </summary>
  238. /// <param name="new_list"></param>
  239. private static void reload_base_list_when_panasonic(List<string> new_list)
  240. {
  241. if (!config_environment.scan_state)
  242. {
  243. var count_new = new_list.Count(x => x.ToUpper().Contains("KV-") || x.ToUpper().Contains("PANASONIC"));
  244. var count_old = scanner_list.Count(x => x.deviceName.ToUpper().Contains("KV-") || x.deviceName.ToUpper().Contains("PANASONIC"));
  245. if (count_new != count_old && count_new > 0)
  246. {
  247. engine_twain32.Engine.load_tw_scanner_list();
  248. }
  249. }
  250. }
  251. }
  252. }