如何存储使用pynput按下的键盘键?

问题描述

我目前正在编写键盘记录器类型的 Python 脚本,但在存储任何给定时刻按下的键时遇到问题。

我写了一小段代码来演示我的问题:

from pynput.keyboard import Key,Listener
import time

def on_press(key):
    print(f'{key} pressed')
    
    if not key in keys_down:
        keys_down[key] = time.time()
    
    print(keys_down)

def on_release(key):
    print(f'{key} release')

    del keys_down[key]

    if key == Key.esc:
        return False

keys_down = dict()

with Listener(
        on_press=on_press,on_release=on_release) as listener:
    listener.join()

我想在字典 keys_down 中存储当前正在按下的键盘键。
我还想知道某个键盘键何时开始被按下。
因此,我字典的键值对存储如下:

keys_down = {
    keyboard key 1: timestamp when first pressed
    keyboard key 2: timestamp when first pressed
    ...
}

键盘键被释放时,我会删除键值对,键与释放的键盘键等效。
我希望这句话是有道理的。
问题出现在使用crtl-shortcut to quick 时。
有时按下时输出键盘键与松开时输出键盘键不同。因此,del 函数会引发错误,因此它会尝试删除不存在的键值参数。

我真的希望你能帮助我解决这个问题。 祝你有美好的一天:)

解决方法

这不是一个令人满意的答案,但代码在安装旧版本的 pynput (1.4) 时有效。在这个版本中,键不是存储为奇怪的十六进制值,而是被按下的文字键