问题描述
我目前正在编写键盘记录器类型的 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) 时有效。在这个版本中,键不是存储为奇怪的十六进制值,而是被按下的文字键