热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#编程指南:实现USB条形码扫描仪的数据读取,自动过滤键盘输入,无需知晓设备及供应商ID

本文探讨了如何在C#中实现USB条形码扫描仪的数据读取,并自动过滤掉键盘输入,即使不知道设备的供应商ID(VID)和产品ID(PID)。通过详细的技术指导和代码示例,展示了如何高效地处理条形码数据,确保系统能够准确识别并忽略来自键盘的干扰信号。该方法适用于多种USB条形码扫描仪,无需额外配置设备信息。

使用USB条形码扫描仪读取条形码,同时忽略键盘数据输入,而扫描仪产品ID和供应商ID未知

有没有办法从USB条形码阅读器读取而忽略键盘而不知道USB扫描仪的PID或VID? 我知道有一种方法可以通过使用USB扫描仪的VID和/或PID来区分USB扫描仪输入和键盘输入; 这是使用http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/中的代码完成的。但是有另一种解决方案来区分键盘和USB扫描仪不将扫描仪的VID或PID放在配置文件(或源代码)中? 不想在配置文件中放置各种VID或PID的原因是,正在开发的应用程序将部署在众多笔记本电脑上,并且附加了任意类型的扫描仪。

此外,我不想配置扫描仪的输出开始和结束序列,因为扫描仪也被同一台机器上的其他软件使用,我不想更改代码在其他软件上。 出于与前面提到的相同的原因,我不想将条形码阅读器编程为串行模式。

有一种方法可以区分键盘和USB条形码阅读器

你可以依赖这些事实:

  1. 条形码阅读器扫描的代码最少4个字符
  2. 条形码阅读器扫描的代码以RETURN“ENTER”结束
  3. 扫描孔条形码需要不到50毫秒

这是一个使用VS2005 VB的简单表格包含:

  1. TextBox1的
  2. TextBox2中
  3. textbox3
  4. Button1的
  5. Timer1“时间间隔设置为50”ms“

Public Class Form1 Dim BarcodeStr As String = "" Dim IsBarcodeTaken As Boolean = False Dim Str As String = "" Dim str3 As String = "" Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If Timer1.Enabled = False Then Str = TextBox1.Text str3 = TextBox3.Text End If End Sub Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress If Timer1.Enabled = False Then Timer1.Enabled = True End If BarcodeStr = BarcodeStr & e.KeyChar If Asc(e.KeyChar) = 13 And Len(BarcodeStr) >= 4 Then IsBarcodeTaken = True TextBox2.Text = BarcodeStr End If End Sub Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp If IsBarcodeTaken = True Then TextBox1.Text = Str TextBox1.Select(Len(TextBox1.Text), 0) Str = "" TextBox3.Text = str3 TextBox3.Select(Len(TextBox3.Text), 0) str3 = "" End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick BarcodeStr = "" IsBarcodeTaken = False Timer1.Enabled = False End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox2.Text = "" End Sub End Class 

好吧,我使用的解决方案非常类似于Ehab的解决方案 – 我只是为我的应用程序清理了一些代码。 我正在为我的编辑控件使用自定义类(它也在做其他一些事情) – 但这些是这个的重要部分:#

  public class ScannerTextBox : TextBox { public bool BarcodeOnly { get; set; } Timer timer; private void InitializeComponent() { this.SuspendLayout(); this.ResumeLayout(false); } void timer_Tick(object sender, EventArgs e) { if (BarcodeOnly== true) { Text = ""; } timer.Enabled = false; } protected override void OnKeyPress(KeyPressEventArgs e) { base.OnKeyPress(e); if (BarcodeOnly== true) { if (timer == null) { timer = new Timer(); timer.Interval = 200; timer.Tick += new EventHandler(timer_Tick); timer.Enabled = false; } timer.Enabled = true; } if (e.KeyChar == 'r') { if (BarcodeOnly== true && timer != null) { timer.Enabled = false; } } } } 

这里还有一个关于条形码的问题,该链接将向您发送一个通过串口使用条形码的答案。 也许那是你的解决方案?

恕我直言:最简单的解决方案是接受键盘的输入。

也许这是一个过于简单的解决方案,但你能捕获按键事件并简单地阻止键盘输入吗?

上述就是C#学习教程:使用USB条形码扫描仪读取条形码,同时忽略键盘数据输入,而扫描仪产品ID和供应商ID未知分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文探讨了在多种编程语言中实现Hello World输出的方法,从经典的C语言到现代的JavaScript,每种语言都有其独特的表达方式。 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • 本文档介绍了如何在Visual Studio 2010环境下,利用C#语言连接SQL Server 2008数据库,并实现基本的数据操作,如增删改查等功能。通过构建一个面向对象的数据库工具类,简化了数据库操作流程。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • 本文介绍了如何计算给定数组中所有非质数元素的总和,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文详细介绍了ASP.NET缓存的基本概念和使用方法,包括输出缓存、数据缓存及其高级特性,如缓存依赖、自定义缓存和缓存配置文件等。通过合理利用这些缓存技术,可以显著提升Web应用程序的性能。 ... [详细]
  • 本教程将深入探讨C#编程语言中的条件控制结构,包括if语句和switch语句的使用方法。通过本课的学习,您将掌握如何利用这些控制结构来实现程序的条件分支逻辑。 ... [详细]
  • 开发笔记:小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表
    开发笔记:小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表 ... [详细]
  • 澄清对 IN 语句索引使用常见误解
    本文旨在纠正关于 MySQL 中 IN 语句是否使用索引的常见误解。许多人认为 IN 语句的索引使用与字符串长度有关,实际上,影响因素更为复杂,包括数据分布和 MySQL 版本等因素。 ... [详细]
author-avatar
从容嘛_100
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有