GTK无法从条形码扫描仪设备接收键盘输入

时间:2019-02-04 16:41:49

标签: python keyboard gtk

我有一台便宜的亚马逊条形码扫描仪,它以USB键盘的形式出现。在Windows应用程序上扫描各种QR码时,输出适当的文本完全没有问题。

但是,我使用的任何Windows GTK应用程序都不会解释此文本。这包括一个自定义的Python应用程序,以及GIMP,Glade和gedit。例外是空格和换行符,它们可以正确解释。编辑:我的问题是我需要使用它与我的Python GTK应用程序一起工作。

在Python中转储关键事件,返回的关键代码在65,000+代码点范围内。某些字符串“ ABCDEFGH”的简短打印输出:

keyval PRS ffb0 (65456)
keyval REL ffb0 (65456)
keyval PRS ffb9 (65465)
keyval REL ffb9 (65465)
keyval PRS ffb7 (65463)
keyval REL ffb7 (65463)
keyval REL ffe9 (65513)
keyval PRS ffe9 (65513)
keyval PRS ffb0 (65456)
keyval REL ffb0 (65456)
keyval PRS ffb9 (65465)
keyval REL ffb9 (65465)
keyval PRS ffb8 (65464)
keyval REL ffb8 (65464)
keyval REL ffe9 (65513)
keyval PRS ffe9 (65513)
keyval PRS ffb0 (65456)
keyval REL ffb0 (65456)
keyval PRS ffb9 (65465)
keyval REL ffb9 (65465)
keyval PRS ffb9 (65465)
keyval REL ffb9 (65465)
keyval REL ffe9 (65513)
keyval PRS ffe9 (65513)
keyval PRS ffb1 (65457)
keyval REL ffb1 (65457)
keyval PRS ffb0 (65456)
keyval REL ffb0 (65456)
keyval PRS ffb0 (65456)
keyval REL ffb0 (65456)
keyval REL ffe9 (65513)
keyval PRS ffe9 (65513)

应用程序在接受普通USB键盘上的普通键方面没有问题,并且复制/粘贴也可以正常工作。

最奇怪的是,这些奇怪的键码不会出现在其他诊断应用程序中,例如我尝试使用Google Chrome和一些JS读取键码,并返回了更典型的ASCII键码范围(大约65-90)。而且,我借用了价格昂贵得多的摩托罗拉Symbol扫描仪,该扫描仪也能正常工作。这款廉价的Eyoyo EY-001扫描仪似乎是唯一具有这种功能的设备。

我还没有在Linux上尝试过。那将是我的下一步。

该扫描仪似乎正在发送一组怪异的扩展密钥代码,或以某种不常见的方式进行的密钥代码,GTK不能很好地使用它们。由于代码似乎在重复,因此似乎根本无法轻松删除此编码。还有其他人遇到过这个问题吗?有任何已知的解决方法吗?

1 个答案:

答案 0 :(得分:1)

所以,我弄清楚了,这是一个非常奇怪的原因。

“键盘”设备未发送实际字符。相反,它保留ALT,然后发送097,最后释放ALT来发送a。 Pygame可以捕获这种行为。看来GTK无法正确捕获此操作,而是返回了垃圾数据。

由于<ALT>-nnn格式是Windows特定的输入键码的方式,因此我怀疑QR码扫描仪通过键盘接口发送扩展字符集的方式是向后兼容的方式。但是,这并不能解释为什么其他一些模拟条形码扫描仪的键盘不能以这种方式工作!

要解决此问题,必须拿起ALT键并将以下三位数字解码为ASCII字符。