首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C#中区分多个输入设备

如何在C#中区分多个输入设备
EN

Stack Overflow用户
提问于 2009-02-25 21:04:45
回答 6查看 32.5K关注 0票数 26

我有一个条形码扫描仪(它的作用就像一个键盘),当然我还有一个连在电脑上的键盘。软件同时接受来自扫描仪和键盘的输入。我只需要接受扫描仪的输入。代码是用C#编写的。有没有办法“禁用”键盘输入,只接受扫描仪的输入?

注:键盘是laptop...so的一部分,不能拔出。此外,我还尝试将以下代码保护覆盖Boolean ProcessDialogKey(System.Windows.Forms.Keys keyData) {ProcessDialogKey true;},但是在忽略键盘击键的同时,条形码扫描器输入也被忽略。

我不能让扫描器发送sentinal字符,因为扫描器正在被其他应用程序使用,添加sentinal字符流将意味着修改其他代码。

此外,我不能使用计时方法来确定输入是否来自条形码扫描仪(如果它是一串字符,后面跟着一个停顿),因为扫描的条形码可能是单字符条形码。

是的,我正在从流中读取数据。

我正在尝试跟随这篇文章:在WinForms中区分条形码扫描器和键盘。然而,我有以下问题:

  1. 由于其保护级别的原因,我收到NativeMethods无法访问的错误。似乎我需要导入一个dll;这样做正确吗?如果是这样,我该怎么做?
  2. Which override void WndProc(ref Message m)定义我应该使用,文章中有两个实现?
  3. Am ref a error to SecurityPermission( SecurityAction.LinkDemand,Flags = SecurityPermissionFlag.UnmanagedCode) error CS0246:找不到类型或命名空间名称'SecurityPermission‘(您是否缺少using指令或程序集引用?)。如何解决此错误?在包含以下内容的行上也有一个错误: if ((from hardwareId in hardwareIds
  4. deviceName.Contains(hardwareId) select hardwareId).Count() > 0) Error is error CS1026:)我将文章中的所有代码放在一个名为BarcodeScannerListener.cs?

的.cs文件中

关于Nicholas Piasecki在http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/上发布的C#解决方案源代码的后续问题

Visual

  • I无法在VS2005中打开该解决方案,因此我下载了 C# 2008速成版,并运行了代码。然而,在连接我的条形码扫描仪并扫描条形码后,程序无法识别扫描。我在OnBarcodeScanned方法中设置了一个断点,但它从未命中。我确实用通过设备管理器获得的条形码扫描仪的id更改了App.config。似乎有2个带有HID#Vid_0536&Pid_01c1的deviceNames (在连接扫描仪时从设备管理器获得)。我不知道这是不是导致扫描无法工作。在遍历deviceNames时,下面是我找到的设备列表(使用调试器):

"\??\HID#Vid_0536&Pid_01c1&MI_01#9&25ca5370&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}“

"\??\HID#Vid_0536&Pid_01c1&MI_00#9&38e10b9&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}“

"\??\HID#Vid_413c&Pid_2101&MI_00#8&1966e83d&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}“

"\??\HID#Vid_413c&Pid_3012#7&960fae0&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd}“

"\??\Root#RDP_KBD#0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}“"\??\ACPI#PNP0303#4&2f94427b&0#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}”"\??\Root#RDP_MOU#0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd}“"\??\ACPI#PNP0F13#4&2f94427b&0#{378de44c-56ef-11d1-bc8c-00a0c91405dd}”

因此,有两个HID#Vid_0536&Pid_01c1条目;这会导致扫描无法工作吗?

好的,看起来我必须找出一种不依赖于scanner...since发送的ASCII0x04字符的方法,我的扫描仪不会发送该字符。之后,触发条形码扫描事件,并显示带有条形码的弹出窗口。所以感谢Nicholas的帮助。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/587840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档