二代证识别相关代码

xiaoxiao2021-02-28  94

public class Card { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 8)] public struct PERSONINFOW { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string name; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)] public string sex; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string nation; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string birthday; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)] public string address; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string cardId; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string police; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string validStart; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string validEnd; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)] public string sexCode; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)] public string nationCode; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)] public string appendMsg; } [DllImport("cardapi3.dll", EntryPoint = "OpenCardReader", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] public static extern Int32 OpenCardReader(Int32 lPort, UInt32 ulFlag, UInt32 ulBaudRate); [DllImport("cardapi3.dll", EntryPoint = "GetPersonMsgW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] public static extern Int32 GetPersonMsgW(ref PERSONINFOW pInfo, string pszImageFile); [DllImport("cardapi3.dll", EntryPoint = "GetPersonMsgA", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] public static extern Int32 GetPersonMsgA(ref PERSONINFOW pInfo, string pszImageFile); [DllImport("cardapi3.dll", EntryPoint = "CloseCardReader", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] public static extern Int32 CloseCardReader(); [DllImport("cardapi3.dll", EntryPoint = "GetErrorTextW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] public static extern void GetErrorTextW(StringBuilder pszBuffer, UInt32 dwBufLen); [DllImport("cardapi3.dll", EntryPoint = "GetCardReaderStatus", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] public static extern long GetCardReaderStatus(long lPort, ulong ulBaudRate); } public class CardMonitorService { #region Fields private Card.PERSONINFOW person; private int port = Convert.ToInt32(ConfigurationManager.AppSettings["port"].ToString()); private UInt32 flag = Convert.ToUInt32(ConfigurationManager.AppSettings["flag"].ToString()); private UInt32 BaudRate = Convert.ToUInt32(ConfigurationManager.AppSettings["BaudRate"].ToString()); #endregion public void ServiceStart(ref Card.PERSONINFOW person, string imagePath) { ThreadInvoke(ref person, imagePath); } private void ThreadInvoke(ref Card.PERSONINFOW person, string imagePath) { if (!OpenDevice()) return; int result = Card.GetPersonMsgW(ref person, imagePath); if (result == 0) { //run = false; CloseDevice(); } } //关闭设备 private void CloseDevice() { Card.CloseCardReader(); } //打开设备 private bool OpenDevice() { int result = Card.OpenCardReader(port, flag, BaudRate); if (result == 0) return true; else return false; } public delegate void Elapsed(); //定义委托 public event Elapsed OnElapsed; private long _Interval = 1000; public long Interval { get { return _Interval; } set { _Interval = value; } } private bool _IsStart = false; private Thread _TimerThread; public void Start() { if (_IsStart) return; _IsStart = true; _TimerThread = new Thread(new ThreadStart(DoTimer)); _TimerThread.Start(); } public void Stop() { try { if (!_IsStart) return; _IsStart = false; _TimerThread.Abort(); } catch (Exception e) { } } private void DoTimer() { try { int last = Environment.TickCount; while (_IsStart) { if (Environment.TickCount - last > _Interval) { if (OnElapsed != null) OnElapsed(); last = Environment.TickCount; } Thread.Sleep(100); } } catch (Exception e) { } } } _Timer = new CardMonitorService(); _Timer.Interval = _Interval; _Timer.Start(); //开始 _Timer.OnElapsed += Timer_OnElapsed; private void Timer_OnElapsed() { Invoke(new Action(() => { // to do.... });
转载请注明原文地址: https://www.6miu.com/read-72551.html

最新回复(0)