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

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

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

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;
        }

指纹采集关键代码:

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字符串

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属性

在页面中注册此插件

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

时间: 2024-10-23 05:06:23

C#开发ActiveX控件及指纹采集的相关文章

C#开发ActiveX控件

昨天写了篇博客<Winform 程序嵌入WPF程序 并发送消息>,没有说明为什么要嵌入WPF程序,那么今天就来唠叨唠叨其中的一个使用场景,开发ActiveX控件 首先,新建一个类库工程HuaYun.ActiveX,右键工程属性,在“应用程序”页,点击“程序集信息”按钮,在弹出的窗体里勾选“使程序集COM可见”,具体操作如下图 第二步,切换到“生成”的选项卡,勾选“为COM互操作注册”,如下图 第三步,在AssemblyInfo.cs里添加[assembly: AllowPartiallyTru

使用C#开发ActiveX控件

最近弄了一个在Qt中使用C#控件的功能,使用的方法是通过C#生产ActiveX控件,在Qt中使用该ActiveX控件.本文这里简单的介绍一下如何用C#生成ActiveX控件. 1. 建立WinForm的UserControl工程,在控件的属性页中选择"使程序集com可见" 分配Guid,在控件上加上GuidAttribute,这儿定义的Guid就是你的ActiveX控件的GUID了 2. 编译运行,编译运行(需要管理员权限)后可以通过系统的用户控件测试容器简单的测试该控件, 3. 发布

C#开发ActiveX控件,并使用web调用

一.开发ActiveX控件 1.新建类库,命名类库名称“user.cs”: 2.在类库中添加自定义用户控件“ UserControl1”,实现各种自定义功能: 3.为了解决浏览器安全设置对控件的影响,必须在组件中加入IObjectSafety接口,所以再添加一个接口类“IObjectSafety.cs” using System; using System.Collections.Generic; using System.Text; using System.Web.UI.WebControl

使用C#开发ActiveX控件(新)

前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是用C++或VB语言开发,本文介绍另一种方式,在.NET Framework平台上,使用C#语言开发ActiveX控件. 虽然本文通篇都在讲如何使用C#语言开发ActiveX控件,但我并不极力推荐使用这种技术,因为该技术存在明显的局限,即需要浏览器端安装.NET Framework(版本取决于开发Ac

[转]C#开发ActiveX控件,.NET开发OCX控件案例

引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么作用?在网页中又如何使用OCX控件,如QQ邮箱的大文件上传应该就是使用OCX控件的,下面开始吧. 0. 前言 ActiveX控件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中.使用ActiveX插件,可以轻松方便的在 Web页中插入多媒体效果.交互

[activeX]使用ATL开发ActiveX控件[转]

本文描述了使用ATL开发一个ActiveX控件的完整过程. 一.创建项目 单击起始页中的"New Project-",选择"ATL"分类下的"ATL Project"项目,项目名称为"Calculator".在随后出现的项目向导中,使用默认配置即可. 二.添加控件 在解决方案管理器中的项目上右击,依次选择"Add"."Class",在添加类对话框中选择ATL分类下的ATL Control

C#.NET开发ActiveX控件

最近刚开发了个activeX控件,下面是我的一些简单总结. 1. 先创建一个类库项目,在AssemblyInfo.cs设置 [assembly: ComVisible(true)] ,意思是使此程序集中的类型对COM组件可见.使用命名空间using System.Runtime.InteropServices;设置[assembly: System.Security.AllowPartiallyTrustedCallers()],保证程序集的可访问. 2.在自定义的类上用vs自带工具生成新的GU

用C#开发ActiveX控件,并使用web调用

入职差不多两个月了,由学生慢慢向职场人做转变,也慢慢的积累知识,不断的更新自己.最近的一个项目里边,涉及到的一些问题,因为SDK提供的只是winform才能使用了,但是有需求咱们必须得完成啊,所以涉及到的ActiveX控件开发并用web来显示的,正好也总结一些,之前在学校一直没有接触过,网上是有教程的,但是大多有问题,只有自己亲自测试通过了才放心. 一.开发ActiveX控件 1.新建类库,命名类库名称“user.cs”: 2.在类库中添加自定义用户控件“ UserControl1”,实现各种自

.NET : 开发ActiveX控件(转载)

我估计有些朋友不清楚ActiveX控件,但这篇博客不是来解释这些概念的.如果你对ActiveX的概念不清楚,请参考这里: http://baike.baidu.com/view/28141.htm 这篇博客也不是讨论ActiveX是否有必要用的,因为这历来也是有些争议的.anyway, 我们这里只是探讨一下如何在.NET中也编写ActiveX控件,我用一个实例记录一下该过程 1. 创建一个类库项目,设置 Comvisible为true,设置AllowPartiallyTrustedCallers