专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

C#开发ActiveX控件及指纹采集

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:01:37       共计:3601 浏览

最近做一个指纹采集和比对的功能,因为公司整个项目是WEB类型的,所以指纹采集的模块要嵌套在网页中,那只有用ActiveX了,以下是一些操作及效果,做个笔记!

新建用户控件,编写CS代码,如下:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Runtime.InteropServices; using System.Windows.Forms; using System.IO; using System.Reflection;     namespace FingerTool {      [Guid( "5136CBA1-59B0-4A96-B2DC-64062A81F377" )]      public partial class FingerToolUC : UserControl,IObjectSafety      {          public FingerToolUC()          {              InitializeComponent();          }          FrmMain fm = null ;          public void ShowSettingForm()          {              if (fm == null )              {                  fm = new FrmMain();              }                            fm.ShowDialog();          }              #region 调用JS接口            [ComImport, Guid( "00000118-0000-0000-C000-000000000046" ), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]          public interface IOleClientSite          {              void SaveObject();                void GetMoniker(uint dwAssign, uint dwWhichMoniker, object ppmk);                void GetContainer(out IOleContainer ppContainer);                void ShowObject();                void OnShowWindow(bool fShow);                void RequestNewObjectLayout();            }            [ComImport, Guid( "0000011B-0000-0000-C000-000000000046" ), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]          public interface IOleContainer          {                void EnumObjects([In, MarshalAs(UnmanagedType.U4)] int grfFlags,                 [Out, MarshalAs(UnmanagedType.LPArray)] object[] ppenum);                void ParseDisplayName([In, MarshalAs(UnmanagedType.Interface)] object pbc,                 [In, MarshalAs(UnmanagedType.BStr)] string pszDisplayName,                 [Out, MarshalAs(UnmanagedType.LPArray)] int [] pchEaten,                 [Out, MarshalAs(UnmanagedType.LPArray)] object[] ppmkOut);                void LockContainer([In, MarshalAs(UnmanagedType.I4)] int fLock);            }            #endregion            #region IE 安全接口          private const string _IID_IDispatch = "{00020400-0000-0000-C000-000000000046}" ;          private const string _IID_IDispatchEx = "{a6ef9860-c720-11d0-9337-00a0c90dcaa9}" ;          private const string _IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}" ;          private const string _IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}" ;          private const string _IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}" ;            private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001 ;          private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002 ;          private const int S_OK = 0 ;          private const int E_FAIL = unchecked(( int ) 0x80004005 );          private const int E_NOINTERFACE = unchecked(( int ) 0x80004002 );            private bool _fSafeForScripting = true ;          private bool _fSafeForInitializing = true ;          public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions)          {              int Rslt = E_FAIL;              string strGUID = riid.ToString( "B" );              pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;              switch (strGUID)              {                  case _IID_IDispatch:                  case _IID_IDispatchEx:                      Rslt = S_OK;                      pdwEnabledOptions = 0 ;                      if (_fSafeForScripting == true )                          pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;                      break ;                  case _IID_IPersistStorage:                  case _IID_IPersistStream:                  case _IID_IPersistPropertyBag:                      Rslt = S_OK;                      pdwEnabledOptions = 0 ;                      if (_fSafeForInitializing == true )                          pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;                      break ;                  default :                      Rslt = E_NOINTERFACE;                      break ;              }                return Rslt;          }

 

指纹采集关键代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 private void axZKFPEngX1_OnImageReceived(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnImageReceivedEvent e)          {              if (!e.aImageValid) return ;              if (axZKFPEngX1.IsDisposed) return ;              try              {                  if (pictureBox1.Image != null )                  {                      pictureBox1.Image.Dispose(); //释放文件资源                      pictureBox1.Image = null ; //清除图片                  }                  if (!System.IO.Directory.Exists(mvPath))                  {                      System.IO.Directory.CreateDirectory(mvPath);                  }                    string FilePath = mvPath + "\\" + Guid.NewGuid().ToString() + ".bmp" ;                    axZKFPEngX1.SaveBitmap(FilePath); //保存新文件                  pictureBox1.Image = System.Drawing.Bitmap.FromFile(FilePath); //显示图片                  pictureBox1.Refresh();                    if ( this .txtValue.Text.Trim() != "" )                  {                      SetMsg( "" , "Control" );                  }              }              catch (Exception ex)              {                  MessageBox.Show(ex.Message);              }          }       private void axZKFPEngX1_OnFeatureInfo(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnFeatureInfoEvent e)          {              string sTemp = "" ;              if (axZKFPEngX1.IsRegister)              {                  sTemp = "登记状态:还需要按压:" + (axZKFPEngX1.EnrollIndex - 1 ).ToString() + "次指纹 " ;              }                sTemp = sTemp + "指纹质量" ;                if (e.aQuality != 0 )              {                  if (e.aQuality == 1 )                  {                      sTemp = sTemp + "特征点不够" ;                  }                  else                  {                      sTemp = sTemp + "其它原因导致不能取到指纹特征" ;                  }              }              else              {                  sTemp = sTemp + "合格" ;                }              this .lblMessage.Text = sTemp;          }

指纹校验部分,最后保存起来的指纹是转换之后的BASE64字符串

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 string Value_Old= "" ; //已经登记的指纹 string Value_Curr= "" ; //当前的指纹     bool IsOK = false ;              bool bRegChange = false ;                if (axZKFPEngX1.VerFingerFromStr(ref Value_Old, Value_Curr, false , ref bRegChange))              {                  IsOK = true ;              }              if (axZKFPEngX1.VerFingerFromStr(ref Value_Old2, Value_Curr, false , ref bRegChange))              {                  IsOK = true ;              }                if (IsOK)              {                  MessageBox.Show( "OK" );              }              else              {                  MessageBox.Show( "NG" );                }

设置项目的COM属性

在页面中注册此插件

采集指纹的次数可以自定义,默认为采集三次之后保存,设备是中控的采集器。

参考页面:http://qingqingquege.cnblogs.com/p/5933752.html

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:c#指纹识别(指纹考勤源码) | ·下一条:C#实现指纹识别功能编程

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有