python - 从 python 中的函数调用键盘记录器进入无响应状态
问题描述
我有一个 python 文件GUIApp.py
,它创建一个Tkinter
基于 GUI 的窗口,现在点击提交我想keylogger
在后台启动和运行,记录输入的键。当我尝试调用该keylogger
函数时,Tkinter
窗口进入无响应状态并且不执行其余操作。下面是代码。请帮忙。
from tkinter import *
import pynput
import logging
from pynput.keyboard import Key as key,Listener
def typingActivity():
keys = []
log_dir = r"C:/Users/navesh/desktop/"
logging.basicConfig(filename=(log_dir + "kLog.txt"), level=logging.INFO, format='%(asctime)s: %(message)s')
def on_press(key):
keys.append(key)
# write_file(keys)
logging.info("Pressed " + str(key))
def on_release(key):
# print('{0} released'.format(key))
keys.append(key)
logging.info("Released " + str(key))
with Listener(on_press=on_press,
on_release=on_release) as listener:
listener.join()
typingAct = Tk()
typingAct.title("Typing Activity")
typingAct.geometry("1500x1500")
userId = userTextbox.get()
q1Label = Label(typingAct, text="1. Why will you recommend this phone")
q1Label.pack()
q1Textbox = Entry(typingAct, width=90)
q1Textbox.pack()
log_dir = r"C:/Users/desktop/"
logging.basicConfig(filename=(log_dir + userId+".txt"), level=logging.INFO, format='%(asctime)s: %(message)s')
root = Tk()
root.title("Data Collection")
root.geometry("1000x1000")
welcomeText = Text(root, height=20, width=50)
#welcomeText.configure('bold_italics', font=('Arial', 12, 'bold', 'italic'))
#root, text="Open browser in desktop")
welcomeText.pack()
welcomeText.insert(END,"Welcome")
userLabel = Label(root, text="Enter UserID")
userLabel.pack()
userTextbox = Entry(root, width=30)
userTextbox.pack()`enter code here`
submitButton = Button(root, text ="Next", command=typingActivity)
submitButton.pack()
root.mainloop()
解决方案
创建两个脚本,一个是 GUI,另一个是键盘记录器脚本:
#GUI.py
import tkinter as tk
import os
import time
import pytesseract_capturer
top = tk.Tk()
top.geometry("200x50")
def opening():
os.system("keylogger.py") #this runs the script keylogger.py when you click capture(or mention the location where your keylogger is)
b = tk.Button(top,text = "quit",width=10, fg="red", command=quit)
b.pack(side=tk.RIGHT)
a = tk.Button(top,text = "capture",width=10, fg="blue", command=opening)
a.pack(side=tk.LEFT)
top.mainloop()
键盘记录器.py
# keylogger using pynput module
import pynput
from pynput.keyboard import Key, Listener
keys = []
def on_press(key):
keys.append(key)
write_file(keys)
try:
print('alphanumeric key {0} pressed'.format(key.char))
except AttributeError:
print('special key {0} pressed'.format(key))
def write_file(keys):
with open('D:/log.txt', 'w') as f: # This will save in D drive as log.txt
for key in keys:
# removing ''
k = str(key).replace("'", "")
f.write(k)
# explicitly adding a space after
# every keystroke for readability
f.write(' ')
def on_release(key):
print('{0} released'.format(key))
if key == Key.esc:
# Stop listener
return False
with Listener(on_press = on_press,
on_release = on_release) as listener:
listener.join()
推荐阅读
- wpf - WPF - 单击外部时未关闭弹出窗口
- javascript - 如何在不使用 eval() 的情况下使用回调更新函数包装中的条件?
- sql - 如何在 sql 过程中管理并发访问
- firebase - 如何知道 Firebase Spark 计划限制是针对每个项目还是针对整个项目?
- php - Yii2 一个下拉列表中的两个 onchange 事件
- angular - Angular 将 img[src] 设置为 null 甚至认为它具有价值
- javascript - 在运行功能时禁用按钮
- c# - 如何将 MongoDB 日期时间转换为 C# 日期时间?
- regex - Perl 正则表达式匹配替代文件名
- python - Google Cloud TTS python 脚本在没有任何特殊原因的情况下陷入僵局