Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理键盘“楔子”输入的最佳方法_C#_Point Of Sale - Fatal编程技术网

C# 处理键盘“楔子”输入的最佳方法

C# 处理键盘“楔子”输入的最佳方法,c#,point-of-sale,C#,Point Of Sale,我正在编写一个C POS销售点系统,它从键盘楔形磁卡读卡器获取输入。这意味着它从磁条上读取的任何数据都会像在键盘上快速键入一样输入。目前,我正在通过附加到KeyPress事件并寻找一系列包含刷卡哨兵字符的快速按键来处理这个问题 有没有更好的方法来处理这种输入 编辑:该设备只是以击键的形式显示数据,不通过其他驱动程序进行交互。此外,我们还使用了广泛的此类设备,因此理想情况下,方法应独立于所使用的特定楔块模型。但是,如果没有其他选项,我将不得不做。您可以做的一件事是,您应该能够配置楔形读取器,以便它

我正在编写一个C POS销售点系统,它从键盘楔形磁卡读卡器获取输入。这意味着它从磁条上读取的任何数据都会像在键盘上快速键入一样输入。目前,我正在通过附加到KeyPress事件并寻找一系列包含刷卡哨兵字符的快速按键来处理这个问题

有没有更好的方法来处理这种输入


编辑:该设备只是以击键的形式显示数据,不通过其他驱动程序进行交互。此外,我们还使用了广泛的此类设备,因此理想情况下,方法应独立于所使用的特定楔块模型。但是,如果没有其他选项,我将不得不做。

您可以做的一件事是,您应该能够配置楔形读取器,以便它在字符串之前或之后显示一个或多个转义字符。您可以使用这些转义字符来知道您即将或刚刚有一个磁卡输入

条形码阅读器设备也使用同样的技术,所以应用程序知道如何获得焦点或处理从设备输入的数据

这种方法的缺点是必须正确配置外部设备。这可能是一个部署问题

这假设您的设备只是以按键方式显示数据,而不通过其他驱动程序进行交互。

I秒


这是条形码阅读器和其他即插即用PnP设备的发展方向。在我之前的任务中,我使用了相同的技术配置了两个1D和2D条形码扫描仪。

我认为您的处理方式可以接受,只是要注意卡发送数据的速度,我们有无线条形码扫描仪,他们不时地在键盘上按一下键,使应用程序能够快速处理

另外,如果你将软件分发到其他地区,那么KeyStokes可能会有所不同,例如我认为在西班牙,但可能是法国,键盘的顶行是!英镑$%^&与美国/英国1234567890相反,如果您的读卡器设置为美国/英国,则会发送!英镑$%^&代替1234567890,因为楔子只是模拟被按下的键,如果windows对它的解释不同,那么这就是你的问题。

再次投票支持。我对销售点系统中的读卡器和支票读卡器也做了同样的工作,我们需要支持键盘楔块以及USB和RS232

基本上,选择一个不太可能来自键盘的短字符序列,并对消息处理循环进行编程,以查看这些字符的到达。如果您获得了与模式匹配的完整字符流,则可以对其余输入进行解码,直到达到指定的“结束”序列,或者直到确定传入序列出错为止。选择一个难以或不可能从常规键盘输入到应用程序的字符串,例如编辑掩码和各种屏幕的行为

一个好的起点是tilda pling~!由于这些字符不太可能出现在任何人的个人详细信息中,也不太可能需要同时出现在便笺等文本中:-


正如jttraino所说,缺点是您可能必须自行配置/编程每个读卡器设备。一些制造商让这件事变得相当容易——你用的是谁的套件?马格泰克?Welch Allyn?

如果您提前知道设备的硬件ID,也可以使用原始输入API。这可能有点疯狂,但它满足了我的要求:在我的例子中,主要目标是即使在应用程序失去焦点的情况下也能接收输入,因为有人在翻找托盘上的项目时不小心撞到了什么东西。第二个目标是我不能添加任何sentinel字符,因为这会破坏现有的第三方应用程序,这些应用程序与扫描枪一起使用

不过,我以前使用过sentinel字符方法,通过按键连接或通过SetWindowsHookEx的低级键盘挂钩,或通过应用程序主窗体上的KeyPreview。如果它符合您的要求,那么使用该方法肯定会简单得多,也更容易。为此,我支持已经给出的建议