区分2个独立键盘的输入

时间:2018-06-14 09:34:51

标签: c# .net vb.net

所有

如果这是一个不明智的问题并且缺乏我到目前为止尝试做的详细例子,请提前道歉 - 我在这个主题上发现的所有材料似乎超出了我正在尝试的范围要做的,或者它刚好超过我的头脑(欢迎学习资源!!)。

我本来要做的是构建一个小程序,区分用于在我的Lenovo Win10机器上创建用户输入的输入设备,该设备可以在后台运行并在满足某些条件时触发脚本。在我的例子中,输入设备是通用无线/ USB键盘,以及充当HID键盘的USB条形码扫描仪(条形码扫描仪直接插入机器,而不是通过键盘)。

我需要区分输入的原因是,例如,如果每次从扫描的条形码打印星号时都运行脚本我希望用户仍然能够从键盘输入星号而不触发脚本 - 我限制使用Code 128条形码,所以我也不能通过在条形码中添加字符来触发键盘上没有的脚本来绕过这个问题。

在伪代码中基本上是

Dim barcodescanner As SerialPort   
barcodescanner = New SerialPort()

barcodescanner.PortName = "COMx"   
barcodescanner.BaudRate = 9600      
barcodescanner.Parity   = Parity.None     
barcodescanner.DataBits = 8             
barcodescanner.StopBits = StopBits.One  
Dim barcode As String          

barcodescanner.Open()                    
barcode = barcodescanner.ReadLine()  
barcodescanner.Close() 

最初我尝试在VB中执行此操作,使用以前用于侦听COM端口的一些代码来记录arduino的输出 -

{{1}}

- 除了我以外的原因,我无法成功地使用虚拟COM端口进行扫描并以这种方式记录数据,我还尝试使用来自http://www.ftdichip.com/FTDrivers.htm的驱动程序创建虚拟COM端口,但这无济于事。

从一些调查中我发现了一些C#类,即; InputEventArgs,InputDevice,RoutedEventArgs,好像它们可以用来解析输入/事件中的设备ID,这可能允许利用我可以用来充实的一些信息并构建上面的伪IF THEN ELSE循环 - 但是我努力使用这些类并实际构建任何可用的代码。

有没有人对如何做到这一点有任何建议?

在一个完美的世界中,如果我可以为条形码扫描器创建一个虚拟COM端口,并使用VB来理解它,那将是理想的 - 但如果没有,是否有人可以建议在C#中执行此操作的方法或指向另一种方法?

1 个答案:

答案 0 :(得分:2)

问题是键盘模拟扫描仪和键盘的工作方式相同,Windows不允许您找出实际发送击键的设备。

一种方法是(如果可能的话,你的扫描仪):

  1. 将扫描仪配置为COM端口仿真(所有扫描仪都不可用,只有工业用扫描仪支持此功能)
  2. 必要时安装制造商的虚拟COM端口驱动程序
  3. 然后,您可以根据需要实际打开COM端口并与扫描仪通信 - 但是,如果需要,您需要自己将扫描的字符串放入文本字​​段中。

    第二种可能的解决方案(如果适用于您的设备):

    1. 配置扫描仪以传输特定的前缀或后缀以及条形码内容(大多数扫描仪可配置为在内容之前发送条形码标识符,这很不可能由用户输入)
    2. 还将扫描程序配置为将CRLF或CR作为最后一个字符发送
    3. 当您收到CRLF或CR时,请检查输入是否以该前缀开头/以该后缀结尾
    4. 如果是,请从文本框中删除前缀/后缀,并根据需要对“*”做出反应。