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

python

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

1、安装pynput

pip install pynput # conda or py3

2、程序功能介绍

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

1 击键行为特征:

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

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

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

2 停顿特征:

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

示例代码:

# -*- 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':'

',

               '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如何监控键盘按了什么键 的全部内容, 来源链接: utcz.com/z/527203.html

回到顶部