我是python的新手,并决定构建一个键盘记录器(用于学习目的),这个程序的想法是采取任何击键的Ascii值并打印出相应的字符,我没有得到正确的Ascii来自我的击键值。例如根据Ascii表格中的字符' a'应该具有97的Ascii值,但我的程序将其吐出值为1(恰好是它在字母表中的位置)。
我的节目:
import pythoncom
import pyHook
def key_event(event):
if int(event.Ascii) != 0:
keylog = chr(event.Ascii)
if int(event.Ascii) == 13:
keylog = '\n'
print(keylog)
return True
hm = pyHook.HookManager()
hm.KeyDown = key_event
hm.HookKeyboard()
pythoncom.PumpMessages()
我的IDE是pyCharm,它偶尔会给我这个关于hm.HookKeyboard()的错误:http://imgur.com/ZgomMSf
关于pythoncom.PumpMessages()的通知:http://imgur.com/h7lECAf
我不知道这些错误是否与我的问题有关,所以我只是想把它扔进去。
答案 0 :(得分:0)
在conda python 2.7环境中,我遇到了类似的问题,因为conda允许你切换正在使用的python版本
问题是python的解释器和编译器核心的C语言缓存在不同版本的python之间共享。从注册表获取按键时,pyHook库必须使用此缓存。
如果从命令行切换到另一个版本的python 而不是同一个,您打算在其中运行代码。
打开python解释器(一个例子就是输入python)并在解释器中输入一个带值的变量(例如:" foo='bar'
"),然后输入exit()
现在在命令行中切换到你要运行代码的另一个版本的python(对于我来说,它是" activate py27_32
"我从我的默认python切换3.5 x64 64位到2.7 x86 32位)
最后,当您运行代码时(示例" python myCode.py
"),event.Ascii
将返回Ascii定义的propper键值
以后重新运行代码需要重复此过程
可能值得寻找一种从python
中清除python缓存的方法
快速修补程序只能获取在Ascii中定义的字符在64和93之间ABCDEFGHIJKLMNOPQRSTUVWXYZ [\]如下所示
keyPressed = chr(int(event.Ascii)+ 64)