Вызов кейлоггера из функции в python переходит в состояние «Не отвечает»

#python #issue-tracking #keylogger

#python #отслеживание проблем #кейлоггер

Вопрос:

У меня есть файл python GUIApp.py , который создает Tkinter окно на основе графического интерфейса, теперь при нажатии на «Отправить» я хотел 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()
  

Ответ №1:

Создайте два сценария, один из которых является графическим интерфейсом, а другой — сценарием кейлоггера:

 #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() 
  

keylogger.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() 

  

Комментарии:

1. Я попробовал этот приведенный вами код. Это тоже создает только окно «не отвечает». При нажатии кнопки «Далее» в указанном мной коде мне нужно сделать 2 вещи. 1. Вызовите кейлоггер 2. Откройте другое окно. Но и в вашем коде второе окно не вызывается, а также первое окно с кнопкой «Далее» переходит в состояние «Не отвечает»

2. Попробуйте подождать несколько раз, примерно минуту или около того, или откройте диспетчер задач и посмотрите, использует ли он процессор или оперативную память или меняются ли значения, если это так, то подождите некоторое время