在Python中读取窗口“失去焦点”时的HID输入
我最近遇到一个问题,已经纠结了好几天,始终没能解决。
我刚开始学习Python,现在就碰上了这个项目中最大的难题。
情况是这样的:我需要做一个程序,可以扫描条形码。然后把这个信息发送给一个在线服务,并打印出PDF文件。这些功能都没问题,但我还想在窗口“失去焦点”的时候也能扫描条形码。也就是说,我希望用户在窗口最小化的时候也能用条形码扫描器进行扫描。
我使用的是Windows 8,编程语言是Python 3.3。我的条形码扫描器是一个HID设备,它把自己当作键盘来使用。我已经尝试把这个项目转换到Python 3.3,但一直没成功。--> http://learn.adafruit.com/barcode-scanner/overview 我遇到了各种各样的错误,至今还没完全搞明白。
今天我尝试使用pywinusb这个模块,但这个模块似乎在寻找HID设备时有问题,因为它连我的键盘和鼠标都找不到。
也许这个问题比较复杂,但我希望有人有经验,能告诉我怎么解决这个问题。
1 个回答
1
如果条形码扫描器表现得像一个键盘,那你想要的基本上就是一个在后台运行的键盘记录器吧?我在网上搜索了一下,发现这个链接是关于“python 键盘记录器”的搜索结果之一。根据这个来源,它需要用到pyWin32和pyHook这两个库。我把记录的部分去掉了,以简化代码示例,只把处理代码放在了OnKeyboardEvent
里。我测试过这个代码,它在我的Windows 7上用Python 2.7可以正常工作,不过这些模块应该也能和Python 3.3兼容。
import pythoncom, pyHook, sys, logging
def OnKeyboardEvent(event):
print "Key: ", chr(event.Ascii)
logging.log(10,chr(event.Ascii))
return True
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()