• C# 扫条形码

    2019-08-14 13:05:00
    //需要有调用窗体注册:KeyDown事件且属性:KeyPreview=true #region 条件处理 BarCodeHook barCodeHook = null; private void MIE_MainFrom_KeyDown(object sender, KeyEventArgs e) { if...
     //需要有调用窗体注册:KeyDown事件且属性:KeyPreview=true
    #region 条件处理 BarCodeHook barCodeHook = null; private void MIE_MainFrom_KeyDown(object sender, KeyEventArgs e) { if (barCodeHook == null) { barCodeHook = new BarCodeHook(); barCodeHook.ResolveBarCodeCompletedEvent += new BarCodeHook.ResolveBarCodeCompleted(barCodeHook_ResolveBarCodeCompletedEvent); } barCodeHook.AppendBarCode = e.KeyValue; } void barCodeHook_ResolveBarCodeCompletedEvent(BarCodeHook barCodeHook) {         //自己的条码处理方法
    }
    #endregion 条件处理

     

    View Code
     public class BarCodeHook
        {
            /// <summary>
            /// 条形码实例
            /// </summary>
            BarCodes barCode;  
            /// <summary>
            /// 单据编号
            /// </summary> 
            public delegate void ResolveBarCodeCompleted(BarCodeHook barCodeHook);
            public event ResolveBarCodeCompleted ResolveBarCodeCompletedEvent;
            /// <summary>
            /// 构造函数
            /// </summary>
            public BarCodeHook()
            {
                //初始化条码事件
                this.barCode = new BarCodes();
                // 添加条码扫描完成事件
                this.barCode.BarCodeCompletedEvent += new BarCodes.BarCodeCompleted(barCode_BarCodeCompletedEvent);
            }
            /// <summary>
            /// 添加条码扫描完成触发事件
            /// </summary>
            /// <param name="barCode"></param>
            private void barCode_BarCodeCompletedEvent(string barCode)
            {
                if (barCode == null || barCode == "")
                    return;
                ResolveBarCode(barCode.ToLower());
            }
    
            /// <summary>
            ///  条码编号处理
            /// </summary>
            private void ResolveBarCode(string barCode)
            {
                this.ResolveBarCodeCompletedEvent(this);
            }   
    
            /// <summary>
            /// 逐个添加字符
            /// </summary>
            public int AppendBarCode
            {
                set
                {
                    barCode.AppendBarCode(value);
                }
            }
             
            /// <summary>
            /// 条形码
            /// </summary>
            private struct BarCodes
            {
                public int VirtKey;      //虚拟码   
                public int ScanCode;     //扫描码   
                public int KeyValue;   //键名   
                public uint AscII;       //AscII   
                public char Chr;         //字符  
    
                public string BarCode;   //条码信息   
                public bool IsValid;     //条码是否有效   
                public DateTime Time;    //扫描时间   
                /// <summary>
                /// 条件读取完毕触发的事件
                /// </summary>
                /// <param name="barCode"></param>
                public delegate void BarCodeCompleted(string barCode);
                public event BarCodeCompleted BarCodeCompletedEvent;
    
                /// <summary>
                /// 逐个添加字符
                /// </summary>
                /// <param name="keyValue">当前字符</param>
                public void AppendBarCode(int keyValue)
                {
                    if (keyValue == 16)
                        return;
                    if ((DateTime.Now.Ticks - this.Time.Ticks) > 800000)
                    {
                        this.BarCode = "";
                    }
                    this.KeyValue = keyValue;
                    this.BarCode += (char)keyValue;
                    this.Time = DateTime.Now;
                    if (KeyValue == 13 && this.BarCode.Length > 3)//回车键&&条件长度大于3
                    {
                        this.IsValid = true;
                        if (this.BarCodeCompletedEvent != null)
                            BarCodeCompletedEvent(this.BarCode);
                    }
                }
            }
        }

     

    转载于:https://www.cnblogs.com/you000/archive/2012/12/06/2804833.html

    展开全文
  • C# zxing条形码开源库的简单使用例子 一、简述 记--使用zxing条形码开源库生成条形码和识别图片中的条形码。 例子:链接: https://pan.baidu.com/s/1Xe_ZEs07mfj-YyvgApK_Zw 提取码: cy6t zxing库下载:...

                                       C# zxing条形码开源库的简单使用例子

    一、简述

           记--使用zxing条形码开源库生成条形码和识别图片中的条形码。

           例子:链接: https://pan.baidu.com/s/1Xe_ZEs07mfj-YyvgApK_Zw 提取码: cy6t

            zxing库下载:https://pan.baidu.com/s/10jeBSyZPvDxvPb6LXw-xlQ 提取码: xufm 

            官网: https://github.com/micjahn/ZXing.Net/releases     

            

    二、效果

            根据输入的英文字符串生成对应的条形码,然后将条形码保存为图片,再根据图片识别出条形码的内容。

            

    三、工程结构

             

             

    四、源文件

            Form1.cs文件

            

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using ZXing.Common;
    
    namespace BarCode
    {
        public partial class MainForm : Form
        {
            public MainForm()
            {
                InitializeComponent();
            }
    
            //生成条形码
            private void buttonCreatorBarCode_Click(object sender, EventArgs e)
            {
                string barCodeStr = textBoxBarCodeStr.Text;
                if (barCodeStr != "")
                {
                    setBarCode128(barCodeStr);
                }
            }
    
            /// <summary>
            /// 将生成的条形码设置到pictureBox
            /// </summary>
            /// <param name="acode">条形码对应的文本</param>
            public void setBarCode128(string barCodeStr)
            {
                try
                {
                    EncodingOptions encodeOption = new EncodingOptions();
                    encodeOption.Height = 100;
                    encodeOption.Width = 300;
                    ZXing.BarcodeWriter wr = new ZXing.BarcodeWriter();
                    wr.Options = encodeOption;
                    wr.Format = ZXing.BarcodeFormat.CODE_128;
                    Bitmap img = wr.Write(barCodeStr);
                    pictureBoxBarCode.Image = img;
                }
                catch
                { }
            }
    
            /// <summary>
            /// 识别条形码图片
            /// </summary>
            /// <param name="picPath">条形码图片的路径</param>
            public void getBarCode128FromPic(string picPath)
            {
                try
                {
                    Bitmap img = new Bitmap(picPath);
                    pictureBoxBarCodePic2.Image = img;
    
                    DecodingOptions decodeOption = new DecodingOptions();           
                    ZXing.BarcodeReader reader = new ZXing.BarcodeReader();
                    reader.Options = decodeOption;
                    ZXing.Result result = reader.Decode(img);
                    string barCodeStr = result.ToString();
                    labelBarCodeResult.Text = "识别结果是:"+barCodeStr;
    
                }
                catch
                { }
            }
    
            /// <summary>
            /// 打开图片文件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void buttonOpenPicFile_Click(object sender, EventArgs e)
            {
                try
                {
                    OpenFileDialog ofd = new OpenFileDialog();
                    ofd.Title = "请选择条形码图片文件";//对话框的标题
                    ofd.InitialDirectory = "D:\\Test";//对话框打开的目录
                    ofd.Filter = "png文件|*.png|所有文件|*.*";//过滤文件类型
                    DialogResult result = ofd.ShowDialog();
                    string res = result.ToString();
                    if (res == "OK")
                    {
                        string filePath = ofd.FileName;
                        getBarCode128FromPic(filePath);
                    }
                }
                catch { }
            }
        }
    }
    

    五、总结

             5.1 添加引用zxing库          

     

             5.2 注意

                   

                  单独将生成的可执行文件(xxx.exe)放在其他目录运行或者是其它电脑运行,需要将zxing库所在路径设置到环境变量或者是将zxing.dll放在可执行文件的同级目录下。 

    展开全文
  • C#编写条形码扫描

    2019-07-30 21:44:56
    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows....namespace 条形码扫描{ pu...

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;


    namespace 条形码扫描
    {
        public partial class Form1 : Form
        {
            BarCodeHook BarCode = new BarCodeHook();
            public Form1()
            {
                InitializeComponent();
                BarCode.BarCodeEvent += new BarCodeHook.BarCodeDelegate(BarCode_BarCodeEvent); 
            }


            private delegate void ShowInfoDelegate(BarCodeHook.BarCodes barCode);
            private void ShowInfo(BarCodeHook.BarCodes barCode)
            {
                if (this.InvokeRequired)
                {
                    this.BeginInvoke(new ShowInfoDelegate(ShowInfo), new object[] { barCode });
                }
                else
                {
                    textBox1.Text = barCode.KeyName;
                    
                }
            }


            void BarCode_BarCodeEvent(BarCodeHook.BarCodes barCode)
            {
                ShowInfo(barCode);
            }


            private void frmTest_Load(object sender, EventArgs e)
            {
                BarCode.Start();
            }


            private void frmTest_FormClosed(object sender, FormClosedEventArgs e)
            {
                BarCode.Stop();
            }


            
        }
    }

    =========================================================================

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using System.Runtime.InteropServices;


    namespace 条形码扫描
    {
         public class BarCodeHook
        {
              public delegate void BarCodeDelegate(BarCodes barCode);  
            public event BarCodeDelegate BarCodeEvent;  
      
            public struct BarCodes  
            {  
                public int VirtKey;      //虚拟码  
                public int ScanCode;     //扫描码  
                public string KeyName;   //键名  
                public uint AscII;       //AscII  
                public char Chr;         //字符  
      
                public string BarCode;   //条码信息  
                public bool IsValid;     //条码是否有效  
                public DateTime Time;    //扫描时间  
            }  
      
            private struct EventMsg  
            {  
                public int message;  
                public int paramL;  
                public int paramH;  
                public int Time;  
                public int hwnd;  
            }  
             
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]  
            private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);  
      
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]  
            private static extern bool UnhookWindowsHookEx(int idHook);  
      
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]  
            private static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);  
      
            [DllImport("user32", EntryPoint = "GetKeyNameText")]  
            private static extern int GetKeyNameText(int lParam, StringBuilder lpBuffer, int nSize);  
      
            [DllImport("user32", EntryPoint = "GetKeyboardState")]  
            private static extern int GetKeyboardState(byte[] pbKeyState);  
      
            [DllImport("user32", EntryPoint = "ToAscii")]  
            private static extern bool ToAscii(int VirtualKey, int ScanCode, byte[] lpKeyState, ref uint lpChar, int uFlags);  
      
            delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);  
            BarCodes barCode = new BarCodes();  
            int hKeyboardHook = 0;  
            string strBarCode = "";  
      
            private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)  
            {  
                if (nCode == 0)  
                {  
                    EventMsg msg = (EventMsg)Marshal.PtrToStructure(lParam, typeof(EventMsg));  
      
                    if (wParam == 0x100)   //WM_KEYDOWN = 0x100  
                    {  
                        barCode.VirtKey = msg.message & 0xff;  //虚拟码  
                        barCode.ScanCode = msg.paramL & 0xff;  //扫描码  
      
                        StringBuilder strKeyName = new StringBuilder(255);  
                        if (GetKeyNameText(barCode.ScanCode * 65536, strKeyName, 255) > 0)  
                        {  
                            barCode.KeyName = strKeyName.ToString().Trim(new char[] { ' ', '0' });  
                        }  
                        else  
                        {  
                            barCode.KeyName = "";  
                        }  
      
                        byte[] kbArray = new byte[256];  
                        uint uKey = 0;  
                        GetKeyboardState(kbArray);                                          
                        if (ToAscii(barCode.VirtKey, barCode.ScanCode, kbArray, ref uKey, 0))  
                        {  
                            barCode.AscII = uKey;  
                            barCode.Chr = Convert.ToChar(uKey);  
                        }  
      
                        if (DateTime.Now.Subtract(barCode.Time).TotalMilliseconds > 50)   
                        {  
                            strBarCode = barCode.Chr.ToString();  
                        }  
                        else  
                        {  
                            if ((msg.message & 0xff) == 13 && strBarCode.Length > 3)   //回车  
                            {  
                                barCode.BarCode = strBarCode;  
                                barCode.IsValid = true;  
                            }  
                            strBarCode += barCode.Chr.ToString();  
                        }  
      
                        barCode.Time = DateTime.Now;  
                        if (BarCodeEvent != null) BarCodeEvent(barCode);    //触发事件  
                        barCode.IsValid = false;  
                    }  
                }  
                return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);            
            }  
              
            // 安装钩子   
            public bool Start()  
            {  
                if (hKeyboardHook == 0)  
                {  
                    //WH_KEYBOARD_LL = 13  
                    hKeyboardHook = SetWindowsHookEx(13, new HookProc(KeyboardHookProc), Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);  
                }  
                return (hKeyboardHook != 0);  
            }  
      
            // 卸载钩子   
            public bool Stop()  
            {  
                if (hKeyboardHook != 0)  
                {  
                    return UnhookWindowsHookEx(hKeyboardHook);  
                }  
                return true;  
            }  


        }
    }

    =================================================================================================

    需要运行exe文件才有结果,直接测试没效果,

    转载于:https://www.cnblogs.com/FLWL/p/3606931.html

    展开全文
  • 基于C# 条形码扫描系统 问题点(); 系统控制流程 A.固定式条码阅读器,读取产品条形码,通过USB串口线连接IPC,并将条形码存入数据库。 B.当固定式条码阅读器无法码成功,信号灯点亮蜂鸣器报警;要求手动码。 C....
  • c#实现读取条形码

    2010-07-08 11:09:00
    技术要点当利用扫描器扫描条形码时,条形码数据会显示在当前获得焦点的窗口控件中。例如,如果当前编辑框获得焦点,那么条形码数据会显示在TextBox文本框中。然后会向TextBox文本框发送回车键按下时的消息。在程序中...

    条形码扫描器销售商品

    实例说明
    文本框:图13.19  利用条形码扫描器销售商品如今,许多超市都利用条形码销售商品。微机操作员利用扫描器在商品的条形码处进行扫描,商品的详细信息就会显示在屏幕中。本例实现了利用条形码销售商品的功能。效果如图13.19所示。
    技术要点
    当利用扫描器扫描条形码时,条形码数据会显示在当前获得焦点的窗口控件中。例如,如果当前编辑框获得焦点,那么条形码数据会显示在TextBox文本框中。然后会向TextBox文本框发送回车键按下时的消息。
    在程序中只要触发TextBox文本框的KeyDown事件,判断当前按键是否是回车键,如果是,读取TextBox文本框中的条形码数据,并从数据表中根据条形码查询商品信息,将其显示在DataGridView列表中。
    实现过程
    (1)新建一个项目,命名为Ex13_18,默认窗体为Form1。
    (2)在Form1窗体中,主要添加TextBox控件,用于接收条形码;添加一个DataGridView控件,用于显示扫描器扫描条形码的商品销售信息。
    (3)主要程序代码。
            private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyValue == 13)
                {
                    OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "price.mdb" + ";Persist Security Info=False");
                    OleDbDataAdapter dap = new OleDbDataAdapter("select * from MerchandiseInfo where barcode='" + textBox1.Text + "'", con);
                     DataSet ds = new DataSet();
                    dap.Fill(ds);
                    if (ds.Tables[0].Rows.Count == 0)
                    {
                        MessageBox.Show("该商品不存在!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    for (int i = 0; i < dataGridView1.RowCount; i++)
                    {
                        if (Convert.ToString(dataGridView1[0, i].Value) == "")
                        {
                            dataGridView1[0, i].Value = ds.Tables[0].Rows[0][0].ToString();
                            dataGridView1[1, i].Value = ds.Tables[0].Rows[0][1].ToString();
                            dataGridView1[2, i].Value = ds.Tables[0].Rows[0][2].ToString();
                            dataGridView1[3, i].Value = ds.Tables[0].Rows[0][3].ToString();
                            return;
                        }
                    }
                }
            }
    展开全文
  • C#开源的最新条形码生成和识别库- NET+Samples.zip 包含了 C#.NET,VB.NET 两个版本,使用VS2010.
  • [C#] 条形码生成

    2013-12-24 22:51:27
    应客户要求,我公司所有的发货单都要有他们的条形码,可是条形码的获取只能在他们的供应商管理系统上,只有登录之后才能下载,并且还是单点登录。 因为公司只有一个账号,销售部需要使用,但是发货是由成品仓库负责...

    应客户要求,我公司所有的发货单都要有他们的条形码,可是条形码的获取只能在他们的供应商管理系统上,只有登录之后才能下载,并且还是单点登录。

    因为公司只有一个账号,销售部需要使用,但是发货是由成品仓库负责的,因此无法登录系统获取条形码。销售部和市场部离的很远,一直让销售部打印了抱去仓库也不是办法。


    因此,我内心萌发了一个想法,既然知道了条形码的数据,是不是可以通过数据去画出条形码呢? 答案是:YES

    在了解了条形码的编码规则以后,开始在网上搜索如何用C#来画出条形码。

    终于让我搜到了一份非常好的代码,并且直接能用。

    用手机上的扫码软件测试,完全正确。



    因为这份代码不是我写的,所以不方便公开出来,如果有需要请联系我,xukang@giant.cn

    展开全文
  • C#操控 条形码扫描

    2013-11-07 09:04:30
    转载收藏使用 ...// 条码扫描器 // 窗体部分相关代码: using System; using System.Collections.Generic;  using System.ComponentModel;  using System.Data;  using System.
  • c#开发条形码生成器

    2019-04-11 20:27:20
    最近一个项目需求需要用到条形码,需要将编号生成条形码,每个窗口柜员就可以用条码枪扫描条形码在各个窗口完成不同的数据库操作,拿到需求后也是一番苦恼,就立马准备起来,很是苦恼,以下相关技术借鉴互联网并加入...
  • c# 条形码扫描

    2007-10-31 13:00:00
    实例435 条形码扫描器销售商品实例说明文本框:图13.19 利用条形码扫描器销售商品" hspace="12" width="255" align="left" src="http://book.csdn.net/BookFiles/499/img/image152.gif" />如今,许多超市都利用条形...
  • 目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书还是各种商品上都随处可见,扫描条形码就可以查询这个商品的信息,非常方便。 生成 生成条形码分为两步,第一步需要先下载并在系统上安装条形码字体,...
  • C#开发的识别图片条形码C#开发的识别图片条形码
  • C#生成Code128条形码

    2017-10-14 18:00:25
    结论C#生成Code128条形码Code128码简介Code128码于1981年推出,是一种长度可变、连续性的字母数字条码。与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用...
  • C#中生成条形码

    2019-06-17 15:36:06
    https://www.cnblogs.com/liqingwen/p/6876392.html
  • C#生成Code39条形码而非条形码字体的方法 由于Code39编译简单、能够对任意长度的数据进行编码、支持设备比较广泛所以被广泛的采用,下面介绍下C#生成Code39条形码而非条形码字体的方法,需要的朋友可以参考...
  • 条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码;二维码也开始应用到很多场合,如火车票有二维码识别、网易的首页有二维码图标,用户只需要用手机扫描一下就可以看到手机版网易的网址,免去了
  • 关于扫描枪对包含中文的二维码扫描的处理,请参考使用c#捕获usb扫描扫描二维码、条形码结果(支持中文版),本文之后的评论不再回复关于中文码的问题 另外,请仔细阅读本文,因为中文支持博文仅修改了本文中的...
  • C#条形码

    2019-07-10 11:19:51
    条形码的三种维码却别:①一维条形码: 一维条形码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准。一维条形码的应用可以提高信息录入的速度,...
1 2 3 4 5 ... 20
收藏数 1,980
精华内容 792