C#实现员工ID卡的识别功能
作者:芝麻粒儿 时间:2021-08-11 23:49:25
实践过程
效果
代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
static int hHook = 0;
public const int WH_KEYBOARD_LL = 13;
//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
HookProc KeyBoardHookProcedure;
[DllImport("kernel32")]
public static extern int Beep(int dwFreq, int dwDuration);//让计算机蜂鸣
string DataPath = "";//数据库路径
OleDbConnection con;//OleDbConnection对象,连接数据库
OleDbCommand cmd;//OleDbCommand对象,执行SQL语句
//键盘Hook结构函数
[StructLayout(LayoutKind.Sequential)]
public class KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
[DllImport("user32.dll")]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
//抽掉钩子
public static extern bool UnhookWindowsHookEx(int idHook);
[DllImport("user32.dll")]
//调用下一个钩子
public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string name);
public string getNum(string code)
{
string flag = "";
switch (code)
{
case "048":
flag="0"; break;
case "049":
flag = "1"; break;
case "050":
flag = "2"; break;
case "051":
flag = "3"; break;
case "052":
flag = "4"; break;
case "053":
flag = "5"; break;
case "054":
flag = "6"; break;
case "055":
flag = "7"; break;
case "056":
flag = "8"; break;
case "057":
flag = "9"; break;
}
return flag;
}
public void Hook_Start()
{
// 安装键盘钩子
if (hHook == 0)
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
KeyBoardHookProcedure,
GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
//如果设置钩子失败.
if (hHook == 0)
{
Hook_Clear();
}
}
}
//取消钩子事件
public void Hook_Clear()
{
bool retKeyboard = true;
if (hHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hHook);
hHook = 0;
}
//如果去掉钩子失败.
if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
}
//这里可以添加自己想要的信息处理
string NumCode="";
public int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
if (wParam == 0x0104 || wParam == 0x0100)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
int flag = kbh.vkCode;
switch (flag)
{
case 96:
NumCode += "0"; break;
case 97:
NumCode += "1"; break;
case 98:
NumCode += "2"; break;
case 99:
NumCode += "3"; break;
case 100:
NumCode += "4"; break;
case 101:
NumCode += "5"; break;
case 102:
NumCode += "6"; break;
case 103:
NumCode += "7"; break;
case 104:
NumCode += "8"; break;
case 105:
NumCode += "9"; break;
}
if (flag == 13)
{
if (NumCode.Length != 0)
{
string c = "";
string id = "";
for (int i = 0; i <= NumCode.Length - 3; i += 3)
{
string b = NumCode.Substring(i, 3);
c += getNum(b);
}
id = c;
if (id.Length == 8)//如果卡号为8位
{
//实例化OleDbConnection对象
con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + DataPath);
con.Open();//打开数据库连接
//实例化OleDbCommand对象,根据ID卡号检索数据表
cmd = new OleDbCommand("select * from tb_UserInfo where CardID='" + id + "'", con);
OleDbDataReader sdr = cmd.ExecuteReader();//实例化OleDbDataReader对象
sdr.Read();//读取记录
txtShowCardID.Text = id;//获取ID卡号
txtShowName.Text = sdr["UName"].ToString();//获取员工姓名
cbbShowSex.Text = sdr["USex"].ToString();//获取员工性别
cbbShowDep.Text = sdr["UDep"].ToString();//获取员工部门
con.Close();//关闭数据库连接
Beep(3000, 100);//计算机蜂鸣
}
NumCode = "";
}
}
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
private void Form1_Load(object sender, EventArgs e)
{
cbbdep.SelectedIndex = 0;//设置部门下拉框的第一项被选中
cbbsex.SelectedIndex = 0;//设置性别下拉框的第一项被选中
//获取数据库路径
DataPath = Application.StartupPath.ToString();
DataPath = DataPath.Substring(0, DataPath.LastIndexOf("\\"));
DataPath = DataPath.Substring(0, DataPath.LastIndexOf("\\"));
DataPath += @"\db.mdb";
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
groupBox1.Enabled = true;
Hook_Clear();
}
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
if (radioButton2.Checked)
{
groupBox1.Enabled = false;
Hook_Start();
}
}
private void button2_Click(object sender, EventArgs e)
{
txtIdcard.Text = "";
txtName.Text = "";
}
private void button1_Click(object sender, EventArgs e)
{
if (txtIdcard.Text == "" || txtName.Text == "")//如果没有输入ID卡号和员工姓名
{
//弹出警告信息
if (MessageBox.Show("请将数据填写完整!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
{
if (txtIdcard.Text == "")//如果没有输入ID卡号
txtIdcard.Focus();//则光标处在输入ID卡号的文本框
if (txtName.Text == "")//如果没有输入员工姓名
txtName.Focus();//则光标处在输入员工姓名的文本框
if (txtIdcard.Text == "" && txtName.Text == "")//如果都没输入数据
txtIdcard.Focus();//则光标处在输入ID卡号的文本框
}
}
else//如果输入了数据
{
if (txtIdcard.Text.Trim().Length != 8)//如果输入的ID卡号不是8位
{
//弹出警告信息
if (MessageBox.Show("ID卡号必须为8位!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
{
txtIdcard.Text = "";//清空输入ID卡号的文本框
txtIdcard.Focus();//让光标处在输入ID卡号的文本框上
}
}
else//如果输入的ID卡号为8位
{
//实例化OleDbConnection对象
con=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + DataPath);
con.Open();//打开连接
//实例化OleDbCommand对象
cmd = new OleDbCommand("select count(*) from tb_UserInfo where CardID='"+txtIdcard.Text.Trim()+"'", con);
int flag =Convert.ToInt32(cmd.ExecuteScalar());//判断是否已经添加过此ID卡号
if (flag > 0)//如果大于0则说明已经添加过
{
//弹出警告信息
if (MessageBox.Show("ID卡号已经添加过了!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
{
button2_Click(sender, e);//清空输入ID卡号和员工姓名的文本框
}
}
else//如果小于0说明没有添加过
{
//实例化OleDbCommand对象
cmd = new OleDbCommand("insert into tb_UserInfo(CardID,UName,USex,UDep) values ('" + txtIdcard.Text.Trim() + "','" + txtName.Text.Trim() + "','" + cbbsex.Text.Trim() + "','" + cbbdep.Text.Trim() + "')", con);
int k = cmd.ExecuteNonQuery();//执行insert语句,将输入的信息添加到数据库中
if (k > 0)//如果大于0则操作成功
{
//弹出提示信息
if (MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
{
button2_Click(sender, e);//清空输入ID卡号和员工姓名的文本框
}
}
}
con.Close();//关闭数据库连接
}
}
}
private void txtIdcard_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(e.KeyChar <= '9' && e.KeyChar >= '0') && e.KeyChar != '\r' && e.KeyChar != '\b')
{
e.Handled = true;
}
}
}
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.txtIdcard = new System.Windows.Forms.TextBox();
this.button2 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.cbbdep = new System.Windows.Forms.ComboBox();
this.label4 = new System.Windows.Forms.Label();
this.cbbsex = new System.Windows.Forms.ComboBox();
this.label3 = new System.Windows.Forms.Label();
this.txtName = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.radioButton1 = new System.Windows.Forms.RadioButton();
this.radioButton2 = new System.Windows.Forms.RadioButton();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.cbbShowDep = new System.Windows.Forms.ComboBox();
this.label5 = new System.Windows.Forms.Label();
this.cbbShowSex = new System.Windows.Forms.ComboBox();
this.label6 = new System.Windows.Forms.Label();
this.txtShowName = new System.Windows.Forms.TextBox();
this.label7 = new System.Windows.Forms.Label();
this.txtShowCardID = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.txtIdcard);
this.groupBox1.Controls.Add(this.button2);
this.groupBox1.Controls.Add(this.button1);
this.groupBox1.Controls.Add(this.cbbdep);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.cbbsex);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.txtName);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Location = new System.Drawing.Point(10, 31);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(435, 120);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "输入员工信息";
//
// txtIdcard
//
this.txtIdcard.Location = new System.Drawing.Point(69, 21);
this.txtIdcard.Name = "txtIdcard";
this.txtIdcard.Size = new System.Drawing.Size(137, 21);
this.txtIdcard.TabIndex = 4;
this.txtIdcard.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtIdcard_KeyPress);
//
// button2
//
this.button2.Location = new System.Drawing.Point(214, 91);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 9;
this.button2.Text = "重置";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button1
//
this.button1.Location = new System.Drawing.Point(131, 91);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 8;
this.button1.Text = "添加";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// cbbdep
//
this.cbbdep.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbbdep.FormattingEnabled = true;
this.cbbdep.Items.AddRange(new object[] {
"C#部门",
"ASP.NET部门",
"基础部",
"VB部门",
"VC部门",
"JAVA部门"});
this.cbbdep.Location = new System.Drawing.Point(279, 57);
this.cbbdep.Name = "cbbdep";
this.cbbdep.Size = new System.Drawing.Size(137, 20);
this.cbbdep.TabIndex = 7;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(212, 60);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(65, 12);
this.label4.TabIndex = 6;
this.label4.Text = "所属部门:";
//
// cbbsex
//
this.cbbsex.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbbsex.FormattingEnabled = true;
this.cbbsex.Items.AddRange(new object[] {
"男职工",
"女职工"});
this.cbbsex.Location = new System.Drawing.Point(69, 57);
this.cbbsex.Name = "cbbsex";
this.cbbsex.Size = new System.Drawing.Size(137, 20);
this.cbbsex.TabIndex = 5;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(6, 61);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(65, 12);
this.label3.TabIndex = 4;
this.label3.Text = "员工性别:";
//
// txtName
//
this.txtName.Location = new System.Drawing.Point(279, 21);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(137, 21);
this.txtName.TabIndex = 3;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(212, 26);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(65, 12);
this.label2.TabIndex = 2;
this.label2.Text = "员工姓名:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(6, 26);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(65, 12);
this.label1.TabIndex = 0;
this.label1.Text = "ID卡编号:";
//
// radioButton1
//
this.radioButton1.AutoSize = true;
this.radioButton1.Checked = true;
this.radioButton1.Location = new System.Drawing.Point(10, 8);
this.radioButton1.Name = "radioButton1";
this.radioButton1.Size = new System.Drawing.Size(95, 16);
this.radioButton1.TabIndex = 1;
this.radioButton1.TabStop = true;
this.radioButton1.Text = "添加员工信息";
this.radioButton1.UseVisualStyleBackColor = true;
this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton1_CheckedChanged);
//
// radioButton2
//
this.radioButton2.AutoSize = true;
this.radioButton2.Location = new System.Drawing.Point(10, 157);
this.radioButton2.Name = "radioButton2";
this.radioButton2.Size = new System.Drawing.Size(95, 16);
this.radioButton2.TabIndex = 2;
this.radioButton2.Text = "获取员工信息";
this.radioButton2.UseVisualStyleBackColor = true;
this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton2_CheckedChanged);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.cbbShowDep);
this.groupBox2.Controls.Add(this.label5);
this.groupBox2.Controls.Add(this.cbbShowSex);
this.groupBox2.Controls.Add(this.label6);
this.groupBox2.Controls.Add(this.txtShowName);
this.groupBox2.Controls.Add(this.label7);
this.groupBox2.Controls.Add(this.txtShowCardID);
this.groupBox2.Controls.Add(this.label8);
this.groupBox2.Enabled = false;
this.groupBox2.Location = new System.Drawing.Point(10, 179);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(435, 93);
this.groupBox2.TabIndex = 3;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "员工信息";
//
// cbbShowDep
//
this.cbbShowDep.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbbShowDep.FormattingEnabled = true;
this.cbbShowDep.Items.AddRange(new object[] {
"C#部门",
"ASP.NET部门",
"基础部",
"VB部门",
"VC部门",
"JAVA部门"});
this.cbbShowDep.Location = new System.Drawing.Point(279, 57);
this.cbbShowDep.Name = "cbbShowDep";
this.cbbShowDep.Size = new System.Drawing.Size(137, 20);
this.cbbShowDep.TabIndex = 7;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(212, 60);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(65, 12);
this.label5.TabIndex = 6;
this.label5.Text = "所属部门:";
//
// cbbShowSex
//
this.cbbShowSex.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbbShowSex.FormattingEnabled = true;
this.cbbShowSex.Items.AddRange(new object[] {
"男职工",
"女职工"});
this.cbbShowSex.Location = new System.Drawing.Point(69, 57);
this.cbbShowSex.Name = "cbbShowSex";
this.cbbShowSex.Size = new System.Drawing.Size(137, 20);
this.cbbShowSex.TabIndex = 5;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(6, 61);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(65, 12);
this.label6.TabIndex = 4;
this.label6.Text = "员工性别:";
//
// txtShowName
//
this.txtShowName.Location = new System.Drawing.Point(279, 21);
this.txtShowName.Name = "txtShowName";
this.txtShowName.Size = new System.Drawing.Size(137, 21);
this.txtShowName.TabIndex = 3;
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(212, 26);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(65, 12);
this.label7.TabIndex = 2;
this.label7.Text = "员工姓名:";
//
// txtShowCardID
//
this.txtShowCardID.Location = new System.Drawing.Point(69, 22);
this.txtShowCardID.Name = "txtShowCardID";
this.txtShowCardID.Size = new System.Drawing.Size(137, 21);
this.txtShowCardID.TabIndex = 1;
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(6, 26);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(65, 12);
this.label8.TabIndex = 0;
this.label8.Text = "ID卡编号:";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(457, 276);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.radioButton2);
this.Controls.Add(this.radioButton1);
this.Controls.Add(this.groupBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.Name = "Form1";
this.Text = "使用ID卡识别员工编号";
this.Load += new System.EventHandler(this.Form1_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.ComboBox cbbdep;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.ComboBox cbbsex;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.RadioButton radioButton1;
private System.Windows.Forms.RadioButton radioButton2;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.ComboBox cbbShowDep;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.ComboBox cbbShowSex;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox txtShowName;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox txtShowCardID;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox txtIdcard;
}
来源:https://blog.csdn.net/qq_27489007/article/details/128474359
标签:C#,识别,员工,ID
0
投稿
猜你喜欢
Java 面试题和答案 -(上)
2023-10-08 08:15:56
从搭建Struts2 开发环境说起
2023-11-18 08:54:53
Android线程实现图片轮播
2021-06-02 17:49:23
c语言颜色代码详解
2021-05-27 08:07:54
Android实现本地图片选择及预览缩放效果
2023-09-27 14:07:28
C# 删除字符串中的中文(实例分享)
2021-12-30 12:55:48
Java将String字符串带括号转成List的简单方法
2022-10-26 18:20:17
Spingboot JPA CriteriaBuilder 如何获取指定字段
2022-07-20 15:40:22
Android程序启动时出现黑屏问题的解决方法
2022-07-06 05:16:39
轻松学习C#的方法
2023-06-21 13:22:32
深入探讨Java多线程中的volatile变量
2023-08-31 02:32:18
java单例模式学习示例
2022-03-29 19:03:41
c#队列Queue学习示例分享
2022-06-30 13:39:45
详解使用Maven开发Web应用详细步骤
2023-08-06 14:18:20
C#异步执行任务的方法
2022-02-27 15:02:41
Java String类的性质与比较
2021-07-29 16:48:37
Java集合删除元素ArrayList实例详解
2022-11-09 19:12:39
Java AtomicInteger类使用方法实例讲解
2023-01-18 16:22:49
详解SpringSecurity中的Authentication信息与登录流程
2022-01-20 21:36:22
Android自定义加载圈的方法
2023-07-16 14:38:46