热门标签 | 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#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • 利用ViewComponents在Asp.Net Core中构建高效分页组件
    通过运用 ViewComponents 技术,在 Asp.Net Core 中实现了高效的分页组件开发。本文详细介绍了如何通过创建 `PaginationViewComponent` 类并利用 `HelloWorld.DataContext` 上下文,实现对分页参数的定义与管理,从而提升 Web 应用程序的性能和用户体验。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • Android ListView 自定义 CheckBox 实现列表项多选功能详解
    本文详细介绍了在Android开发中如何在ListView的每一行添加CheckBox,以实现列表项的多选功能。用户不仅可以通过点击复选框来选择项目,还可以通过点击列表的任意一行来完成选中操作,提升了用户体验和操作便捷性。同时,文章还探讨了相关的事件处理机制和布局优化技巧,帮助开发者更好地实现这一功能。 ... [详细]
  • 在单个图表中实现饼图与条形图的精准对齐 ... [详细]
  • 在MFC开发过程中,利用Windows内置的文件对话框可以显著提高文件操作的效率。本文总结了使用文件对话框进行文件选择和处理的经验,详细介绍了相关API的调用方法和参数设置,如`CFileDialog`类的使用、结构体`OPENFILENAME`的配置以及如何获取选中的文件路径。通过这些技巧,开发者可以快速实现文件的打开、保存等功能,提升应用程序的用户体验。 ... [详细]
  • 在Java应用中实现只读模式的切换方法与技巧 ... [详细]
  • 精通jQuery:深入解析事件处理机制与应用技巧
    本文详细探讨了jQuery的事件处理机制及其应用技巧,通过具体的代码示例,逐一解析了每个jQuery代码片段与其对应的HTML结构。文章以标记为基准,CSS作为通用样式,确保每段代码都能独立运行。HTML和CSS代码统一放置在文章末尾,方便读者参考和实践。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 本文深入探讨了 HTML 中的 `margin` 属性,详细解析了其基本特性和应用场景。文章不仅介绍了 `margin` 的基本概念,还重点讨论了垂直外边距合并现象,并分析了 `margin` 在块级元素与内联元素中的不同表现。通过实例和代码示例,帮助读者全面理解 `margin` 的使用技巧和常见问题。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • 在Android开发中,通过调用系统内置的音频和视频播放功能,可以实现高效、便捷的多媒体处理。本文将详细介绍如何利用Android系统的媒体播放器组件,实现对音频和视频文件的播放控制,包括基本的播放、暂停、停止等操作,以及如何处理播放过程中的各种事件,确保应用的稳定性和用户体验。 ... [详细]
  • 本文深入探讨了 Android 中的 SharedPreferences 机制及其应用场景。作为一种轻量级的数据存储方案,SharedPreferences 采用了键值对的形式,类似于 iOS 中的 NSUserDefaults。它适用于存储简单的配置信息和用户偏好设置,如登录状态、主题选择等。通过分析其内部实现原理和使用方法,本文为开发者提供了详细的指导和最佳实践建议。 ... [详细]
  • 本文深入解析了如何通过自定义 ViewGroup 实现类似支付宝风格的酷炫雷达脉冲动画效果。文章详细介绍了自定义 ViewGroup 的原理和实现步骤,并结合实际案例展示了如何在 Android UI 设计中应用这一技术,为开发者提供了宝贵的参考和实践指导。 ... [详细]
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社区 版权所有