【问题标题】:Listen for a specific key using pynput keylogger?使用 pynput 键盘记录器监听特定键?
【发布时间】:2020-12-15 17:14:33
【问题描述】:

我想创建一个按键记录器,它会侦听按键 'w' 'a' 's' 'd' 并在检测到这些键时将它们添加到列表中。到目前为止我有这个代码

from pynput.keyboard import *
keys_pressed=[]
def on_press(key):
        print(key)

def on_release(key):
    if key==Key.esc:
        return False

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

如何检查是否按下了特定键,并将其添加到 keys_pressed 列表中?

【问题讨论】:

    标签: python pynput


    【解决方案1】:

    您可以使用KeyCode.from_char(char) 从指定的字符中获取密钥。所以KeyCode.from_char('w') 将返回w 的密钥。

    然后您可以将对应于 W、A、S 和 D 的键存储在列表或其他任何内容中,如果按下的键等于其中之一,请检查您的回调。

    这是一个例子:

    from pynput.keyboard import *
    
    keys = [KeyCode.from_char(c) for c in 'wasd']
    
    def on_press(key):
        if key in keys:
            print(f'good key: {key}')
        else:
            print(f'bad key: {key}')
    
    def on_release(key):
        if key==Key.esc:
            return False
    
    with Listener(on_press=on_press,on_release=on_release) as listener:
        listener.join()
    

    【讨论】:

    • 嘿!谢谢!我使用了这段代码,它运行良好:prnt.sc/u6h0ai 但是当我按下空格键等特殊键时出现另一个错误,我该如何解决?错误是:prnt.sc/u6h0j0
    • 这是因为当按下的键不是字母时,它是Key对象而不是KeyCode,并且只有KeyCode对象有char字段。使用我的解决方案应该可以正常工作,或者在检查字符之前,您可以检查它是否是 KeyCode 而不是 Key
    • 如何遍历列表?它给了我这个错误: TypeError: 'KeyCode' object is not iterable。我知道我可以把它变成一个字符串,但是除了变成一个字符串,还有其他方法吗?
    • 我不太明白,能否请您提供您的代码?
    猜你喜欢
    • 2021-02-11
    • 2020-04-21
    • 2019-12-07
    • 2022-01-02
    • 2020-05-24
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多