Register.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Runtime.InteropServices;
  9. using System.Text;
  10. using System.Threading;
  11. using System.Windows.Forms;
  12. using EntityDataSet;
  13. using IntelligentControlForsx.Service.FingerSvc;
  14. using IntelligentControlForsx.Service.WindturbineControl.Domain.Cmd;
  15. using libzkfpcsharp;
  16. namespace IntelligentControlForsx.ChildForms
  17. {
  18. public partial class Register : Form
  19. {
  20. #region 指纹读取常用量
  21. bool bIsTimeToDie = false;
  22. IntPtr mDevHandle = IntPtr.Zero;
  23. IntPtr mDBHandle = IntPtr.Zero;
  24. IntPtr FormHandle = IntPtr.Zero;
  25. const int MESSAGE_CAPTURED_OK = 0x0400 + 6;
  26. byte[] FPBuffer;//返回图像
  27. private byte[] fingerTemp = new byte[2048];//指纹模板
  28. int fingerTempLength = 2048;//实际返回指纹模板长度
  29. private int mfpWidth = 0;//图片宽度
  30. private int mfpHeight = 0;//图片高度
  31. byte[] finger1 = new byte[2048];
  32. byte[] finger2 = new byte[2048];
  33. byte[] finger3 = new byte[2048];
  34. byte[] registResultFinger = new byte[2048];//最终结果模板
  35. int iFid = 1;//指纹编号
  36. private int pushFingerCount = 0;
  37. byte[] dataBaseTemp = new byte[2048];
  38. #endregion
  39. private UserSvc userSvc;
  40. //获取路径
  41. string homeStr = "";
  42. public Register()
  43. {
  44. InitializeComponent();
  45. homeStr = Application.StartupPath;
  46. userSvc = UserSvc.GetUserSvc();
  47. userSvc.InitUser();
  48. FingerInit();
  49. StartsScanning();
  50. picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif");
  51. }
  52. private void Register_Load(object sender, EventArgs e)
  53. {
  54. FormHandle = this.Handle;
  55. }
  56. private void btnSubmit_Click(object sender, EventArgs e)
  57. {
  58. string name = txtName.Text.Trim();
  59. string tel = txtTel.Text.Trim();
  60. string userName = txtUserName.Text.Trim();
  61. string passWord = txtPassWord.Text.Trim();
  62. if (string.IsNullOrEmpty(name))
  63. {
  64. lblInfo.Text = "请输入姓名";
  65. return;
  66. }
  67. if (string.IsNullOrEmpty(tel))
  68. {
  69. lblInfo.Text = "请输入电话";
  70. return;
  71. }
  72. if (string.IsNullOrEmpty(userName))
  73. {
  74. lblInfo.Text = "请输入用户名";
  75. return;
  76. }
  77. if (string.IsNullOrEmpty(passWord))
  78. {
  79. lblInfo.Text = "请输入密码";
  80. return;
  81. }
  82. user dbUser = userSvc.LoginUserCheck(mDBHandle, registResultFinger);
  83. if (dbUser != null)
  84. {
  85. MessageBox.Show("您已注册,不能重复注册");
  86. return;
  87. }
  88. user newUser = new user();
  89. newUser.name = name;
  90. newUser.telephone = tel;
  91. newUser.user_name = userName;
  92. newUser.pass_word = passWord;
  93. newUser.finger1_template = registResultFinger;
  94. int count = userSvc.RegisterUser(newUser);
  95. if (count > 0)
  96. {
  97. MessageBox.Show("注册成功");
  98. zkfp2.Terminate();
  99. zkfp2.CloseDevice(mDevHandle);
  100. zkfp2.CloseDevice(mDBHandle);
  101. this.Dispose();
  102. }
  103. else
  104. {
  105. MessageBox.Show("注册失败,请重置并重新注册");
  106. }
  107. }
  108. /// <summary>
  109. /// 初始化指纹设备
  110. /// </summary>
  111. private void FingerInit()
  112. {
  113. int ret = zkfperrdef.ZKFP_ERR_OK;
  114. if ((ret = zkfp2.Init()) == zkfperrdef.ZKFP_ERR_OK)
  115. {
  116. int nCount = zkfp2.GetDeviceCount();
  117. if (nCount <= 0)
  118. {
  119. zkfp2.Terminate();
  120. MessageBox.Show("找不到设备,请检查指纹刷是否连接");
  121. }
  122. }
  123. else
  124. {
  125. MessageBox.Show("指纹输入设备初始化失败,请检查指纹刷是否连接");
  126. }
  127. }
  128. /// <summary>
  129. /// 打开扫描
  130. /// </summary>
  131. private void StartsScanning()
  132. {
  133. Console.WriteLine("设备初始化");
  134. int ret = zkfp.ZKFP_ERR_OK;
  135. if (IntPtr.Zero == (mDevHandle = zkfp2.OpenDevice(0)))
  136. {
  137. MessageBox.Show("打开扫描失败");
  138. return;
  139. }
  140. if (IntPtr.Zero == (mDBHandle = zkfp2.DBInit()))
  141. {
  142. MessageBox.Show("打开扫描失败");
  143. zkfp2.CloseDevice(mDevHandle);
  144. mDevHandle = IntPtr.Zero;
  145. return;
  146. }
  147. byte[] paramValue = new byte[4];
  148. int size = 4;
  149. zkfp2.GetParameters(mDevHandle, 1, paramValue, ref size);
  150. zkfp2.ByteArray2Int(paramValue, ref mfpWidth);
  151. size = 4;
  152. zkfp2.GetParameters(mDevHandle, 2, paramValue, ref size);
  153. zkfp2.ByteArray2Int(paramValue, ref mfpHeight);
  154. FPBuffer = new byte[mfpWidth * mfpHeight];
  155. Thread captureThread = new Thread(new ThreadStart(DoCapture));
  156. captureThread.IsBackground = true;
  157. captureThread.Start();
  158. bIsTimeToDie = false;
  159. }
  160. /// <summary>
  161. /// 指纹扫描线程
  162. /// </summary>
  163. private void DoCapture()
  164. {
  165. while (!bIsTimeToDie)
  166. {
  167. fingerTempLength = 2048;
  168. int ret = zkfp2.AcquireFingerprint(mDevHandle, FPBuffer, fingerTemp, ref fingerTempLength);
  169. if (ret == zkfp.ZKFP_ERR_OK)
  170. {
  171. if (pushFingerCount == 0)
  172. {
  173. finger1 = (byte[])fingerTemp.Clone();
  174. Console.WriteLine("手指1");
  175. FingerReadSvc.SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero);
  176. }
  177. else if (pushFingerCount == 1)
  178. {
  179. finger2 = (byte[])fingerTemp.Clone();
  180. Console.WriteLine("手指2");
  181. FingerReadSvc.SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero);
  182. }
  183. else if (pushFingerCount == 2)
  184. {
  185. finger3 = (byte[])fingerTemp.Clone();
  186. Console.WriteLine("手指3");
  187. FingerReadSvc.SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero);
  188. }
  189. else
  190. {
  191. FingerReadSvc.SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero);
  192. }
  193. }
  194. Thread.Sleep(200);
  195. }
  196. }
  197. protected override void DefWndProc(ref Message m)
  198. {
  199. switch (m.Msg)
  200. {
  201. case MESSAGE_CAPTURED_OK:
  202. {
  203. MemoryStream ms = new MemoryStream();
  204. BitmapFormat.GetBitmap(FPBuffer, mfpWidth, mfpHeight, ref ms);
  205. BitmapFormat.WriteBitmap(FPBuffer, mfpWidth, mfpHeight);
  206. Bitmap bmp = new Bitmap(ms);
  207. int ret = zkfp.ZKFP_ERR_OK;
  208. int fid = 0, score = 0;
  209. if (pushFingerCount == 0)
  210. {
  211. ret = zkfp2.DBIdentify(mDBHandle, finger1, ref fid, ref score);
  212. pushFingerCount = 1;
  213. lblInfo.Text = "指纹第一次录入成功,请再次输入指纹";
  214. this.picFinger1.Image = bmp;
  215. picFinger2.Image = Image.FromFile(homeStr + @"\images\finger.gif");
  216. }
  217. else if (pushFingerCount == 1)
  218. {
  219. int compareScore = zkfp2.DBMatch(mDBHandle, finger1, finger2);
  220. if (compareScore <= 0)
  221. {
  222. lblInfo.Text = "请连续三次输入相同手指的指纹";
  223. finger1 = new byte[2048];
  224. finger2 = new byte[2048];
  225. finger3 = new byte[2048];
  226. pushFingerCount = 0;
  227. picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif");
  228. picFinger2.Image = Image.FromFile(homeStr + @"\images\finger_static.png");
  229. picFinger3.Image = Image.FromFile(homeStr + @"\images\finger_static.png");
  230. }
  231. else
  232. {
  233. pushFingerCount = 2;
  234. lblInfo.Text = "指纹第二次录入成功,请再次输入指纹";
  235. this.picFinger2.Image = bmp;
  236. picFinger3.Image = Image.FromFile(homeStr + @"\images\finger.gif");
  237. }
  238. }
  239. else if (pushFingerCount == 2)
  240. {
  241. int compareScore = zkfp2.DBMatch(mDBHandle, finger3, finger2);
  242. if (compareScore <= 0)
  243. {
  244. lblInfo.Text = "请连续三次输入相同手指的指纹";
  245. finger1 = new byte[2048];
  246. finger2 = new byte[2048];
  247. finger3 = new byte[2048];
  248. pushFingerCount = 0;
  249. picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif");
  250. picFinger2.Image = Image.FromFile(homeStr + @"\images\finger_static.png");
  251. picFinger3.Image = Image.FromFile(homeStr + @"\images\finger_static.png");
  252. }
  253. else
  254. {
  255. pushFingerCount = 3;
  256. lblInfo.Text = "指纹第三次录入成功";
  257. this.picFinger3.Image = bmp;
  258. }
  259. }
  260. else
  261. {
  262. //txtInfo.Text = "未知错误";
  263. }
  264. if (pushFingerCount == 3)
  265. {
  266. int ret1 = zkfp2.DBMerge(mDBHandle, finger1, finger2, finger3, registResultFinger,
  267. ref pushFingerCount);
  268. int ret2 = zkfp2.DBAdd(mDBHandle, iFid, registResultFinger);
  269. if (ret1 == zkfp.ZKFP_ERR_OK && ret2 == zkfp.ZKFP_ERR_OK)
  270. {
  271. btnSubmit.Enabled = true;
  272. }
  273. }
  274. }
  275. break;
  276. default:
  277. base.DefWndProc(ref m);
  278. break;
  279. }
  280. }
  281. private void btnClose_Click(object sender, EventArgs e)
  282. {
  283. zkfp2.Terminate();
  284. zkfp2.CloseDevice(mDevHandle);
  285. zkfp2.CloseDevice(mDBHandle);
  286. this.Dispose();
  287. }
  288. private void txtName_TextChanged(object sender, EventArgs e)
  289. {
  290. string name = txtName.Text.Trim();
  291. string tel = txtTel.Text.Trim();
  292. if (!string.IsNullOrWhiteSpace(name) && !string.IsNullOrEmpty(tel))
  293. {
  294. //FingerInit();
  295. //StartsScanning();
  296. //string homeStr = Application.StartupPath;
  297. //picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif");
  298. }
  299. }
  300. private void txtTel_TextChanged(object sender, EventArgs e)
  301. {
  302. string name = txtName.Text.Trim();
  303. string tel = txtTel.Text.Trim();
  304. if (!string.IsNullOrWhiteSpace(name) && !string.IsNullOrEmpty(tel))
  305. {
  306. //FingerInit();
  307. //StartsScanning();
  308. //string homeStr = Application.StartupPath;
  309. //picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif");
  310. }
  311. }
  312. private void btnRest_Click(object sender, EventArgs e)
  313. {
  314. txtName.Text = "";
  315. txtTel.Text = "";
  316. finger1 = new byte[2048];
  317. finger2 = new byte[2048];
  318. finger3 = new byte[2048];
  319. registResultFinger = new byte[2048];
  320. pushFingerCount = 0;
  321. picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif");
  322. picFinger2.Image = Image.FromFile(homeStr + @"\images\finger_static.png");
  323. picFinger3.Image = Image.FromFile(homeStr + @"\images\finger_static.png");
  324. }
  325. }
  326. }