【问题标题】:GTK fails to receive keyboard input from barcode scanner deviceGTK 无法从条形码扫描仪设备接收键盘输入
【发布时间】:2023-03-17 22:30:01
【问题描述】:

我有一个廉价的亚马逊原产条形码扫描仪,它显示为 USB 键盘。在Windows应用程序上扫描各种二维码时,输出相应的文字完全没有问题。

但是,我使用过的任何 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)。而且,我借了一个更昂贵的摩托罗拉符号扫描仪,它也能正常工作。这款便宜的 Eyoyo EY-001 扫描仪似乎是唯一具有这种行为方式的设备。

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

似乎此扫描仪正在发送一组奇怪的扩展键码,或以某种不寻常的方式发送的键码,GTK 无法很好地处理这些键码。由于代码似乎是重复的,如果它是编码的话,似乎不可能轻易地删除这种编码。有没有其他人遇到过这个问题?是否有任何已知的解决方法?

【问题讨论】:

  • 通常,Stack Overflow 是针对您在编程过程中遇到的问题,或用于编程的软件。您的问题是关于将现有软件与现有硬件一起使用,遗憾的是,这超出了 Stackoverflow 的范围。但是,由于您花费大量精力编写问题,甚至包括原始密钥转储,我将您的问题标记为迁移到 SuperUser,在那里他们有一般的软件和硬件问题,以及您的问题在哪里。
  • @ferrybig 我不认为这是一个超级用户的问题,因为它与 为什么 库返回错误值以及如何在 Python 中解决该问题有关。

标签: python keyboard gtk


【解决方案1】:

所以,我想通了,这是一个非常奇怪的原因。

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

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

要解决这个问题,需要按下 ALT 键并将以下三位数字解码为 ASCII 字符。

【讨论】:

    猜你喜欢
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2011-08-03
    相关资源
    最近更新 更多