大家好。
我有一台条形码扫描仪连接到一台使用 c# 程序的 PC。现在我想区分扫描仪和键盘,哪一个正在向我的程序发送数据。
每个人都可以帮助我编写 c# 代码或提供建议吗?
有人在另一个主题中对我说了这句话(但我还不能这样做):
基本上,您可以配置扫描仪发送一些字符,这些字符基本上告诉计算机“嗨,是我”。当您在输入流中看到这些字符时,您就知道该信息来自条形码扫描仪,而不是用户在键盘上键入的内容。您检查过条码扫描仪随附的手册吗?它应该有更多关于这方面的信息。
查看截至 2019 年 3 月的更新:
https://stackoverflow.com/a/55411255/495455 https://stackoverflow.com/a/55411255/495455
如果您的应用程序使用特定的条形码(例如所有相同的字符长度或可以与正则表达式匹配的条形码),那么您可以通过编写机器人打字测试来解决它。例如:
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
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)