微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从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"),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",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() 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?