【问题标题】:How do I correctly capture data from a Symbol LS2208 barcode scanner with C#如何使用 C# 从 Symbol LS2208 条码扫描仪正确捕获数据
【发布时间】:2012-11-12 12:08:14
【问题描述】:

我被要求开发一个 C# Winforms 应用程序,它可以读取条形码并根据带有相关条形码的产品处理数据。

我们使用的条形码扫描仪是 Symbol LS2208 usb 扫描仪,当它来的时候,盒子里没有说明或 cd。我们将其插入,它会向我们发出哔哔声,并且能够将条形码值扫描到记事本中作为测试。

在我的应用程序中,我如何确保扫描仪将数据填充到相关的文本框中(我在其他所有操作(例如按钮单击等)之后设置焦点)以及我如何知道何时扫描了整个条形码?目前我有一个表单计时器,每 50 毫秒计时一次并检查文本框值的长度。如果它不再变大,我假设整个条码都已写入。

只是感觉有点“笨拙”,想知道是否有其他方法可以做到这一点?

【问题讨论】:

  • 检查扫描仪长度不是一个好主意。如果有人错误地一个接一个地扫描了两次条码怎么办?
  • 如果文本框有一个值并且自上次更新以来没有更改,那么我读取该值并清除文本框。

标签: c# barcode scanning


【解决方案1】:

Distinguishing Barcode Scanners from the Keyboard in WinForms

查看此线程。那里有你需要的一切。

如果您将使用此特定扫描仪,您可以将其设置为在输入结束时发送特定信号。要设置您的扫描枪,您需要阅读您设备的文档,这些文档可能在制造商的网站上提供。

Another solution 如果您将使用相同的扫描枪。

如果您的客户要使用许多不同的扫描仪,那么设置每个扫描仪并跟踪他们的输入会有点困难。在这种情况下,您必须计算按键之间的时间(Windows 无法区分条形码扫描仪和普通键盘)。但是您仍然必须知道扫描仪发送的输入的后缀。

【讨论】:

  • 链接已失效。
  • 是的,对不起,那是 8 年前 :(
【解决方案2】:

大多数条形码扫描仪在实际条形码数据之前和之后发送几个控制字符,通常是 ^B 和 ^C。

通过监听 keypress 事件来查看它实际发送的键,并观察它发送的控制字符。这样您就可以确定条码数据的开始和结束时间。

【讨论】:

    【解决方案3】:

    Motorola Driver and SDK for Scanners

    在我看来,摩托罗拉实际上有一个 SDK 用于这种事情,带有驱动程序特定的 LS2208。

    大量文档:

    Motorola LS2208 Documentation

    说真的,谷歌摩尔!

    【讨论】:

      【解决方案4】:

      符号或摩托罗拉 LS2208 是一款非常标准的条码扫描器。 LS2208 on RJLTechnologies.com

      但是,您正在做的问题不是扫描仪,它可能是您从与正在使用的条形码相关的基础处理整个应用程序的方式。如果需要从多层信息中收集信息单个代码也许使用二维条码可能会更好,也许是数据矩阵或类似的东西。

      另外,解析将被简化,您可以使用 symbol/motorola adf 预先存在的库在应用程序外部通过编程条形码对扫描仪进行编程,或者您可以使用 Motorola Solutions 的扫描实用程序 123SCAN2。这意味着您的应用程序更加灵活,不受特定扫描仪的束缚,并且可以更灵活地使用所需的硬件,而不是依赖特定品牌或扫描仪。

      问候,

      【讨论】:

        【解决方案5】:

        您需要一个解决方案,用于在扫描条码后执行某种操作。您想在条形码阅读器扫描条形码后做一些事情,对吗?那么这将帮助你更多。 为用于扫描条形码的文本框编写 keyPress 事件。现在,如果您在那里编写任何代码,每次您从键盘按下任何键或每次条形码扫描仪读取字符时都会执行该代码。如果要在扫描条形码后执行某些代码,则需要在该 keyPress 事件中添加条件。条形码扫描仪具有与每次条形码扫描相关的返回字符 (\n)。所以你需要在 keyPress 事件中添加这个条件。以下是供您参考的代码。

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
        
            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Return)
                {
                    MessageBox.Show( textBox1.Text + " scanned...");
                    //write your code here
                }
        
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-04
          • 2013-08-29
          • 1970-01-01
          • 1970-01-01
          • 2019-01-08
          相关资源
          最近更新 更多