Python - 键盘字符的Ascii值不正确

时间:2016-04-11 05:43:07

标签: python ascii

我是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

我不知道这些错误是否与我的问题有关,所以我只是想把它扔进去。

1 个答案:

答案 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)