如何防止Python中的某些特定按键“发送”输入

问题描述 投票:0回答:2

我正在尝试使用Python来代替AutoHotkey。我已经设置了 pynput 来监听按键,并且大部分内容都按照我的预期工作。但是,我有一个问题,如果我通过监听键盘并在按键上执行某些操作来“重新绑定”一个键,它仍然会发送原始命令。我不了解 DirectInput 幕后的事情,更不用说其上的所有层了,所以很难解释我的问题。

我想要的示例(将 F3“重新绑定”到鼠标单击):

Press F3
Mouse click input is sent

发生情况的示例:

Press F3
F3 input is sent
Mouse click input is sent

如何防止发送多余的密钥,从而只发送我的“反弹”操作?

python python-3.x pyautogui pynput
2个回答
3
投票

当您使用

pynput
设置键盘监听器时,您应该能够设置
suppress = True
;来自文档

suppress (bool) – 是否抑制事件。将其设置为 True 将阻止输入事件传递到系统的其余部分。

例如,不要使用文档中的示例代码:

# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

您可以通过这种方式修改它以阻止事件传递到系统的其余部分:

# Collect events until released
with keyboard.Listener(
        suppress=True,
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

请注意,没有选项可以仅阻止某些键,因此如果您想阻止热键并允许其他键通过,您可能需要在

on_press
回调中设置默认情况,通过按相同的键来通过密钥与刚刚通过您用来“重新绑定”热键的相同类型的
keyboard.Controller
机制注册。


0
投票
from pynput import keyboard # 1
def on_key_press(key): # 2
    print(f'Key {key} pressed') # 3
listener = keyboard.Listener(on_press=on_key_press) # 4
import keyboard # 4.1
keyboard.block_key('a') # 4.2
listener.start() # 5
listener.join() # 6

此代码捕获所有按下的键,并防止键“a”影响除此 Python 应用程序之外的任何其他应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.