C# 将输入限制到C语言中的特定设备#

C# 将输入限制到C语言中的特定设备#,c#,winforms,textbox,C#,Winforms,Textbox,我有两个设备(键盘和条形码扫描仪)和两个文本框(文本框1和文本框2) 现在我想限制用户只能使用文本框1中的键盘和文本框2中的条形码扫描仪 在C#?中这怎么可能呢?我想这取决于扫描仪的连接方式。如果它只是连接在电脑和键盘之间,你就不走运了,因为没有任何可靠的方法来区分键盘输入和扫描仪输入 如果它单独连接,则必须有某种方法获取扫描仪数据,可能是通过扫描仪软件提供的类,因此您必须使用那里提供的内容,并将接收到的内容放入TextBox2.Text。至于禁用此框的键盘输入,只需设置TextBox2.Rea

我有两个设备(键盘和条形码扫描仪)和两个文本框(文本框1和文本框2)

现在我想限制用户只能使用文本框1中的键盘和文本框2中的条形码扫描仪


在C#?

中这怎么可能呢?我想这取决于扫描仪的连接方式。如果它只是连接在电脑和键盘之间,你就不走运了,因为没有任何可靠的方法来区分键盘输入和扫描仪输入


如果它单独连接,则必须有某种方法获取扫描仪数据,可能是通过扫描仪软件提供的类,因此您必须使用那里提供的内容,并将接收到的内容放入
TextBox2.Text
。至于禁用此框的键盘输入,只需设置
TextBox2.ReadOnly=true

您就可以看到:

因此,您的扫描仪可能会发送特殊字符来帮助您识别输入是否来自扫描仪,或者它可能会为您提供一个额外的库,您可以使用它来检测此类事件。 假设扫描器的作用与键盘相同,没有任何特殊字符,以帮助您知道它来自扫描器,也没有您可以使用的制造商站点的任何附加库。 然后您可以使用的是:在第二个文本框的KeyDown事件中测量输入速度

我怀疑扫描器会立即输入代码,所以你会有一个巨大的打字速度

然后,如果输入速度大于阈值(例如,对于人类,世界速度记录大约为每分钟1000个字符),则删除输入的文本。
这很有意思,但我没有更好的主意。

我只使用过一次条形码扫描仪。在我的扫描仪中,在它将输入传递给计算机之前,可以强制它生成特殊的控制序列。这种行为是通过扫描仪的本机软件掌握的。但我无法指定任何细节,因为我没有参与定制-我的同事在我之前定制了它。

在我的例子中,扫描仪在扫描日期之前发送Ctrl+J,我能够确定输入源是来自键盘还是来自条形码扫描仪

一旦我们弄清楚这家伙到底想要什么,我想我对我的答案所做的编辑是相当全面的。每个扫描仪的特殊字符序列将不同,因此我的应用程序将取决于条形码型号。我可以用任何方法概括这一点吗?不是以100%可靠的方式。我唯一的想法是通过测量某人输入字符的速度是否超过我在回答的第二部分中描述的人类输入速度来检测这个问题。但它是黑的。