• 技术文章 >常见问题 >Python常见问题

    Python如何监控键盘按了什么键

    月亮邮递员月亮邮递员2020-03-26 18:05:30原创3237

    Python如何监控键盘按了什么键

    1、安装pynput

    1

    pip install pynput # conda or py3

    2、程序功能介绍

    这个程序是为了实现监听键盘操作,记录键盘输入的值,获取

    1 击键行为特征:

    第一个键释放到第二个键按下的时间

    第一个键按下到第二个键释放的时间

    按下一个键盘到释放的时间

    2 停顿特征:

    停顿是两次敲击键盘是时间差超过规定的停顿阈限,根据已有的研究,这里将停顿阈限定为 2s。本文提取停顿次数、最长停顿、停顿位置等特征。

    示例代码:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    # -*- coding: utf-8 -*-ahello world

    import sys, os

    from pynput.keyboard import Controller, Key, Listener

    from pynput import keyboard

    import time

    # from tkinter import *

     

    start=time.time()

    end=time.time()

    fun_start=0

    time_interval=0

    index=0

    dict={'interval_times':0,'max_interval':0.,'interval_location':[]}

    count=0

    count_dict={'first_time':0.,'first_p_to_second_r':0.}

    keyBoard_dict={'Key.enter':'\n',

                   'Key.space':' ',

                   "Key.tab":'\t'}

    #比较按键生成的两个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:\Users\admin\Desktop\key_record.txt','a',encoding='utf-8') as f:

                f.write(key.char)

            with open(r'C:\Users\admin\Desktop\key_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:\Users\admin\Desktop\key_record.txt', 'a',encoding='utf-8') as f:

                    f.write(keyBoard_dict[str(key)])

                with open(r'C:\Users\admin\Desktop\key_record1.txt', 'a',encoding='utf-8') as f:

                    f.write(keyBoard_dict[str(key)])

            if str(key) in ['Key.backspace']:

                com_str(r'C:\Users\admin\Desktop','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交互式怎么写if语句 下一篇:Python如何根据日期判断周几

    相关文章推荐

    • Python能显示中文时间吗• Python可以做桌面应用程序吗• Python交互式怎么写if语句

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网