首页 > 解决方案 > 如何防止某些特定键在 Python 中“发送”输入

问题描述

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

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

Press F3
Mouse click input is sent

发生情况的示例:

Press F3
F3 input is sent
Mouse click input is sent

如何防止发送多余的密钥,所以只发送我的“反弹”动作?

标签: pythonpython-3.xpyautoguipynput

解决方案


当你设置你的键盘监听器时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您用来“重新绑定”热键的相同机制进行注册。


推荐阅读