嘿所有。 我有一台条形码扫描仪连接到一台使用C#程序的电脑。现在我想区分扫描仪和键盘哪一个正在向我的程序发送数据。 每个人都可以帮我一个代码或建议在C#中?区分扫描仪和键盘
有人在另一个话题中对我说过这件事(但我还不能这样做): 基本上,您可以配置扫描仪发送一些基本上可以告诉计算机的字符“嗨,这就是我”。当您在输入流中看到这些字符时,您知道信息来自条形码扫描器,而不是来自用户在键盘上键入的内容。你检查过你的条形码扫描仪附带的手册吗?它应该有更多关于这方面的信息。
嘿所有。 我有一台条形码扫描仪连接到一台使用C#程序的电脑。现在我想区分扫描仪和键盘哪一个正在向我的程序发送数据。 每个人都可以帮我一个代码或建议在C#中?区分扫描仪和键盘
有人在另一个话题中对我说过这件事(但我还不能这样做): 基本上,您可以配置扫描仪发送一些基本上可以告诉计算机的字符“嗨,这就是我”。当您在输入流中看到这些字符时,您知道信息来自条形码扫描器,而不是来自用户在键盘上键入的内容。你检查过你的条形码扫描仪附带的手册吗?它应该有更多关于这方面的信息。
如果您的应用程序使用特定的条形码(例如,所有相同的字符长度或可以与RegEx匹配的字符),那么您可以通过编写一个Robot Typing测试来解决这个问题。例如:
VB.Net:
Private sw As Stopwatch
Private Sub FirstCharacterEntered()
sw.Start()
End Sub
Private Sub txt_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt.TextChanged
If txt.length = 0 Then FirstCharacterEntered()
If txt.Length = BarCodeSerialLength Or New RegularExpressions.Regex("your pattern").IsMatch(txt.Text) Then
sw.Stop()
If sw.ElapsedMilliseconds < TimeAHumanWouldTakeToType Then
'Input is from the BarCode Scanner
End If
End If
End Sub
C#:
private Stopwatch sw;
private void FirstCharacterEntered()
{
sw.Start();
}
private void txt_TextChanged(System.Object sender, System.EventArgs e)
{
if (txt.length == 0)
FirstCharacterEntered();
if (txt.Length == BarCodeSerialLength | new RegularExpressions.Regex("your pattern").IsMatch(txt.Text)) {
sw.Stop();
if (sw.ElapsedMilliseconds < TimeAHumanWouldTakeToType) {
//Input is from the BarCode Scanner
}
}
}
扫描数据将典型地以回车或换行字符结尾,称为后缀。您也许可以配置扫描仪以包含前缀。这就是你的朋友试图告诉你的。
谢谢。但我做了不同的方式。我用这个链接来确定哪一个(键盘或条形码扫描器发送输入)http://www.codeproject.com/KB/system/rawinput.aspx – 2011-04-12 07:40:51
如果扫描仪是系统设备管理器中的HID键盘设备,则它是键盘。 – Enigmativity 2016-07-05 05:42:56