如何在python中实现监控用户键盘按了什么按键?这个方法超详细

本篇文章小编给大家分享一个在python中实现实时监控用户键盘按了什么按键的方法,如果感兴趣的小伙伴一定要耐心的阅读完这篇文章,小编相信阅读完大家一定会有所收获 。

如何在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)

推荐阅读