【问题标题】:Texbox input, disable for keyboard, keep for barcode scanner文本框输入,键盘禁用,条码扫描器保留
【发布时间】:2014-02-20 00:05:30
【问题描述】:

我制作了一个带有文本框的 Windows 窗体应用程序。我将强制用户使用条形码扫描仪,因此应禁用键盘输入。 KeyPressed 事件不起作用,因为条形码扫描仪的输入也被禁用。

我想也许我可以在 TextChanged 事件上设置一个计时器,但我真的不知道它是如何工作的。

有什么好主意吗?

【问题讨论】:

  • 您应该能够将文本框的启用属性设置为 false,然后使用您从条形码扫描仪获得的任何 API 来挂钩扫描事件并将文本框值设置为该结果扫描。
  • 希望对您有所帮助nicholas.piasecki.name/blog/2009/02/…

标签: c# keypress barcode-scanner windows-forms-designer disabled-input


【解决方案1】:

根据您的描述,我假设您的条形码扫描仪是 HID 条形码扫描仪。如果是这样,这里就没有简单的答案,因为条形码扫描仪的功能与键盘完全一样。禁用键盘输入将禁用条码扫描器。

我以前做过这个,我知道有几个解决方案:

  1. 使用不是 HID 条形码扫描仪的条形码扫描仪。例如:串行,或类似的东西。
  2. 将条码扫描器配置为在条码扫描的开始和结束时发送一个特殊字符。 (如果您有特定型号的条形码扫描仪的手册,您可以执行此操作。)编写您的 KeyPressed 事件以侦听这些特殊字符,作为它正在从条形码扫描仪获取数据的信号。当它看到它们时,启用和禁用文本框。
  3. 使用 Windows API 调用直接与条码扫描器通信。这需要了解条码扫描器的 VID 和 PID,以及一些详细的 API 知识,例如 GetRawInputDeviceInfo、GetRawInputData 和 RegisterRawInputDevices。这非常强大,因为您可以从应用程序的任何位置接收条形码输入,但它非常复杂。

但是,有一个警告:您可能根本不想禁用文本框。如果条码损坏,扫描仪无法读取怎么办?您总是希望用户能够手动输入条形码。下次您在商店检查收银机时,请注意总有一种方法可以手动输入条形码。

【讨论】:

  • 谢谢,不能选择其他条码扫描器。有没有可能用计时器之类的?条码扫描仪的输入比人工输入要快得多。
  • 这取决于条形码扫描仪和人。我见过缓慢的条形码扫描仪和快速的人类。我建议避免使用基于时间的解决方案。归根结底,这里的根本问题是条码扫描仪界面很糟糕。他们假装自己是键盘,并且没有提供有用的 API 来访问它们。
【解决方案2】:

您可以找到检查 keysUp 和 Keysdown 事件的方法。

查看here获取详细答案。

查看here 以获得答案

查看here 获取 github 代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多