using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Windows.Forms; using EntityDataSet; using IntelligentControlForsx.Service.FingerSvc; using IntelligentControlForsx.Service.WindturbineControl.Domain.Cmd; using libzkfpcsharp; namespace IntelligentControlForsx.ChildForms { public partial class Register : Form { #region 指纹读取常用量 bool bIsTimeToDie = false; IntPtr mDevHandle = IntPtr.Zero; IntPtr mDBHandle = IntPtr.Zero; IntPtr FormHandle = IntPtr.Zero; const int MESSAGE_CAPTURED_OK = 0x0400 + 6; byte[] FPBuffer;//返回图像 private byte[] fingerTemp = new byte[2048];//指纹模板 int fingerTempLength = 2048;//实际返回指纹模板长度 private int mfpWidth = 0;//图片宽度 private int mfpHeight = 0;//图片高度 byte[] finger1 = new byte[2048]; byte[] finger2 = new byte[2048]; byte[] finger3 = new byte[2048]; byte[] registResultFinger = new byte[2048];//最终结果模板 int iFid = 1;//指纹编号 private int pushFingerCount = 0; byte[] dataBaseTemp = new byte[2048]; #endregion private UserSvc userSvc; //获取路径 string homeStr = ""; public Register() { InitializeComponent(); homeStr = Application.StartupPath; userSvc = UserSvc.GetUserSvc(); userSvc.InitUser(); FingerInit(); StartsScanning(); picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif"); } private void Register_Load(object sender, EventArgs e) { FormHandle = this.Handle; } private void btnSubmit_Click(object sender, EventArgs e) { string name = txtName.Text.Trim(); string tel = txtTel.Text.Trim(); string userName = txtUserName.Text.Trim(); string passWord = txtPassWord.Text.Trim(); if (string.IsNullOrEmpty(name)) { lblInfo.Text = "请输入姓名"; return; } if (string.IsNullOrEmpty(tel)) { lblInfo.Text = "请输入电话"; return; } if (string.IsNullOrEmpty(userName)) { lblInfo.Text = "请输入用户名"; return; } if (string.IsNullOrEmpty(passWord)) { lblInfo.Text = "请输入密码"; return; } user dbUser = userSvc.LoginUserCheck(mDBHandle, registResultFinger); if (dbUser != null) { MessageBox.Show("您已注册,不能重复注册"); return; } user newUser = new user(); newUser.name = name; newUser.telephone = tel; newUser.user_name = userName; newUser.pass_word = passWord; newUser.finger1_template = registResultFinger; int count = userSvc.RegisterUser(newUser); if (count > 0) { MessageBox.Show("注册成功"); zkfp2.Terminate(); zkfp2.CloseDevice(mDevHandle); zkfp2.CloseDevice(mDBHandle); this.Dispose(); } else { MessageBox.Show("注册失败,请重置并重新注册"); } } /// /// 初始化指纹设备 /// private void FingerInit() { int ret = zkfperrdef.ZKFP_ERR_OK; if ((ret = zkfp2.Init()) == zkfperrdef.ZKFP_ERR_OK) { int nCount = zkfp2.GetDeviceCount(); if (nCount <= 0) { zkfp2.Terminate(); MessageBox.Show("找不到设备,请检查指纹刷是否连接"); } } else { MessageBox.Show("指纹输入设备初始化失败,请检查指纹刷是否连接"); } } /// /// 打开扫描 /// private void StartsScanning() { Console.WriteLine("设备初始化"); int ret = zkfp.ZKFP_ERR_OK; if (IntPtr.Zero == (mDevHandle = zkfp2.OpenDevice(0))) { MessageBox.Show("打开扫描失败"); return; } if (IntPtr.Zero == (mDBHandle = zkfp2.DBInit())) { MessageBox.Show("打开扫描失败"); zkfp2.CloseDevice(mDevHandle); mDevHandle = IntPtr.Zero; return; } byte[] paramValue = new byte[4]; int size = 4; zkfp2.GetParameters(mDevHandle, 1, paramValue, ref size); zkfp2.ByteArray2Int(paramValue, ref mfpWidth); size = 4; zkfp2.GetParameters(mDevHandle, 2, paramValue, ref size); zkfp2.ByteArray2Int(paramValue, ref mfpHeight); FPBuffer = new byte[mfpWidth * mfpHeight]; Thread captureThread = new Thread(new ThreadStart(DoCapture)); captureThread.IsBackground = true; captureThread.Start(); bIsTimeToDie = false; } /// /// 指纹扫描线程 /// private void DoCapture() { while (!bIsTimeToDie) { fingerTempLength = 2048; int ret = zkfp2.AcquireFingerprint(mDevHandle, FPBuffer, fingerTemp, ref fingerTempLength); if (ret == zkfp.ZKFP_ERR_OK) { if (pushFingerCount == 0) { finger1 = (byte[])fingerTemp.Clone(); Console.WriteLine("手指1"); FingerReadSvc.SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero); } else if (pushFingerCount == 1) { finger2 = (byte[])fingerTemp.Clone(); Console.WriteLine("手指2"); FingerReadSvc.SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero); } else if (pushFingerCount == 2) { finger3 = (byte[])fingerTemp.Clone(); Console.WriteLine("手指3"); FingerReadSvc.SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero); } else { FingerReadSvc.SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero); } } Thread.Sleep(200); } } protected override void DefWndProc(ref Message m) { switch (m.Msg) { case MESSAGE_CAPTURED_OK: { MemoryStream ms = new MemoryStream(); BitmapFormat.GetBitmap(FPBuffer, mfpWidth, mfpHeight, ref ms); BitmapFormat.WriteBitmap(FPBuffer, mfpWidth, mfpHeight); Bitmap bmp = new Bitmap(ms); int ret = zkfp.ZKFP_ERR_OK; int fid = 0, score = 0; if (pushFingerCount == 0) { ret = zkfp2.DBIdentify(mDBHandle, finger1, ref fid, ref score); pushFingerCount = 1; lblInfo.Text = "指纹第一次录入成功,请再次输入指纹"; this.picFinger1.Image = bmp; picFinger2.Image = Image.FromFile(homeStr + @"\images\finger.gif"); } else if (pushFingerCount == 1) { int compareScore = zkfp2.DBMatch(mDBHandle, finger1, finger2); if (compareScore <= 0) { lblInfo.Text = "请连续三次输入相同手指的指纹"; finger1 = new byte[2048]; finger2 = new byte[2048]; finger3 = new byte[2048]; pushFingerCount = 0; picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif"); picFinger2.Image = Image.FromFile(homeStr + @"\images\finger_static.png"); picFinger3.Image = Image.FromFile(homeStr + @"\images\finger_static.png"); } else { pushFingerCount = 2; lblInfo.Text = "指纹第二次录入成功,请再次输入指纹"; this.picFinger2.Image = bmp; picFinger3.Image = Image.FromFile(homeStr + @"\images\finger.gif"); } } else if (pushFingerCount == 2) { int compareScore = zkfp2.DBMatch(mDBHandle, finger3, finger2); if (compareScore <= 0) { lblInfo.Text = "请连续三次输入相同手指的指纹"; finger1 = new byte[2048]; finger2 = new byte[2048]; finger3 = new byte[2048]; pushFingerCount = 0; picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif"); picFinger2.Image = Image.FromFile(homeStr + @"\images\finger_static.png"); picFinger3.Image = Image.FromFile(homeStr + @"\images\finger_static.png"); } else { pushFingerCount = 3; lblInfo.Text = "指纹第三次录入成功"; this.picFinger3.Image = bmp; } } else { //txtInfo.Text = "未知错误"; } if (pushFingerCount == 3) { int ret1 = zkfp2.DBMerge(mDBHandle, finger1, finger2, finger3, registResultFinger, ref pushFingerCount); int ret2 = zkfp2.DBAdd(mDBHandle, iFid, registResultFinger); if (ret1 == zkfp.ZKFP_ERR_OK && ret2 == zkfp.ZKFP_ERR_OK) { btnSubmit.Enabled = true; } } } break; default: base.DefWndProc(ref m); break; } } private void btnClose_Click(object sender, EventArgs e) { zkfp2.Terminate(); zkfp2.CloseDevice(mDevHandle); zkfp2.CloseDevice(mDBHandle); this.Dispose(); } private void txtName_TextChanged(object sender, EventArgs e) { string name = txtName.Text.Trim(); string tel = txtTel.Text.Trim(); if (!string.IsNullOrWhiteSpace(name) && !string.IsNullOrEmpty(tel)) { //FingerInit(); //StartsScanning(); //string homeStr = Application.StartupPath; //picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif"); } } private void txtTel_TextChanged(object sender, EventArgs e) { string name = txtName.Text.Trim(); string tel = txtTel.Text.Trim(); if (!string.IsNullOrWhiteSpace(name) && !string.IsNullOrEmpty(tel)) { //FingerInit(); //StartsScanning(); //string homeStr = Application.StartupPath; //picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif"); } } private void btnRest_Click(object sender, EventArgs e) { txtName.Text = ""; txtTel.Text = ""; finger1 = new byte[2048]; finger2 = new byte[2048]; finger3 = new byte[2048]; registResultFinger = new byte[2048]; pushFingerCount = 0; picFinger1.Image = Image.FromFile(homeStr + @"\images\finger.gif"); picFinger2.Image = Image.FromFile(homeStr + @"\images\finger_static.png"); picFinger3.Image = Image.FromFile(homeStr + @"\images\finger_static.png"); } } }