本篇文章小编给大家分享一个在python中实现实时监控用户键盘按了什么按键的方法,如果感兴趣的小伙伴一定要耐心的阅读完这篇文章,小编相信阅读完大家一定会有所收获 。
文章插图
如果要实现监控键盘按键功能,那么我们需要以下几步:
第一步,我们需要安装pynput
pip install pynput # conda or py3然后,我们需要进行一个程序功能介绍
这个程序是为了实现监听键盘操作,记录键盘输入的值,获取
1 击键行为特征:
第一个键释放到第二个键按下的时间
第一个键按下到第二个键释放的时间
按下一个键盘到释放的时间
2 停顿特征:
停顿是两次敲击键盘是时间差超过规定的停顿阈限,根据已有的研究,这里将停顿阈限定为 2s 。本文提取停顿次数、**长停顿、停顿位置等特征 。
示例代码:
【如何在python中实现监控用户键盘按了什么按键?这个方法超详细】# -*- coding: utf-8 -*-ahello worldimport sys, osfrom pynput.keyboard import Controller, Key, Listenerfrom pynput import keyboardimport time# from tkinter import *start=time.time()end=time.time()fun_start=0time_interval=0index=0dict={'interval_times':0,'max_interval':0.,'interval_location':[]}count=0count_dict={'first_time':0.,'first_p_to_second_r':0.}keyBoard_dict={'Key.enter':'', 'Key.space':' ', "Key.tab":' '}#比较按键生成的两个txt文件,这里主要是为了实现当退格键按下后,#对比退格前后文本的差异,这里可以自己延伸def com_str(path, file1, file2): path1 = os.path.join(path, file1) path2 = os.path.join(path, file2) with open(path1, 'r', encoding='utf-8') as f: file1 = f.readlines() content1 = [str.strip().split() for str in file1] with open(path2, 'r', encoding='utf-8') as f: file2 = f.readlines() content2 = [str.strip().split() for str in file2] #print("content1:", content1) #print("content2:", content2) str1 = [] str2 = [] for sub_list in content1: str1.extend(sub_list) for sub_list in content2: str2.extend(sub_list) # print("the str1:", str1, "the length:", len(str1)) #print("the str2:", str2, "the length:", len(str2)) origanl_len = len(str1) print("extend", origanl_len) if len(str1) > len(str2): str2.extend([' '] * (len(str1) - len(str2))) elif len(str1) < len(str2): str1.extend([' '] * (len(str2) - len(str1))) index = 0 indexs = [] count = 0 for i, j in zip(str1, str2): if i != j: indexs.append(index) count += 1 if index < origanl_len - 1: print("the before...") else: print("the after...") index += 1 if count == 1: print("single...") elif count>1: print("the sentence...")#得到键入的值def get_key_name(key): if isinstance(key, keyboard.KeyCode): with open(r'C:UsersadminDesktopkey_record.txt','a',encoding='utf-8') as f: f.write(key.char) with open(r'C:UsersadminDesktopkey_record1.txt','a',encoding='utf-8') as f: f.write(key.char) return key.char else: if str(key) in ['Key.enter','Key.space','Key.tab']: with open(r'C:UsersadminDesktopkey_record.txt', 'a',encoding='utf-8') as f: f.write(keyBoard_dict[str(key)]) with open(r'C:UsersadminDesktopkey_record1.txt', 'a',encoding='utf-8') as f: f.write(keyBoard_dict[str(key)]) if str(key) in ['Key.backspace']: com_str(r'C:UsersadminDesktop','key_record.txt','key_record1.txt') return str(key)# 监听按压def on_press(key): global fun_start,time_interval,index,dict,count,count_dict fun_start = time.time() if count == 0: count_dict['first_time'] = fun_start if index == 0 or index == 1: time_interval = fun_start - start if index == 1 and time_interval > 2.: #停顿位置 dict["interval_location"].append(key) #停顿次数 dict['interval_times'] += 1 #**长停顿 dict['max_interval'] = time_interval if time_interval > dict['max_interval'] else dict['max_interval'] index += 1 print("正在按压:", get_key_name(key))# 监听释放def on_release(key): global start,fun_start, time_interval, index,count,count_dict count+=1 if count==2: #第一个键按下到第二个键释放的时间 count_dict['first_p_to_second_r']=time.time()-count_dict['first_time'] count=0 #按下一个键盘到释放的时间 print("the interval between first press and release:", time.time() - start-time_interval) start = time.time() index = 1 print("已经释放:", get_key_name(key)) if key == Key.esc: # 停止监听 return False# 开始监听def start_listen(): with Listener(on_press=on_press, on_release=on_release) as listener: listener.join()if __name__ == '__main__': # 开始监听,按esc退出监听 start_listen() print(dict)
推荐阅读
- Python内怎么去查看所有的对象?Python如何查看指定模块的内容
- python中怎么调用另一个程序?这三个方法你不一定都知道
- Python要怎么去判断一个列表是否存在某个值?这两个方法都可以
- 如何查看自己电脑有python?这篇文章教你查看安装了哪个版本的python
- python中怎么定义很多全局变量?这两个方法你一定要知道
- Python怎么将值传递给参数?Python函数调用传参的方法
- Python自学可以看哪些书?Python自学的读书路线是什么
- pycharm如何安装pygame?这个方法非常简单
- python脚本查找文件是否存在的方法?这三个方法你不一定都知道
- 用Python怎么写定时器?这篇文章通过源码来教会你