python - 如何防止某些特定键在 Python 中“发送”输入
问题描述
我正在尝试使用 Python 来替换 AutoHotkey。我已经设置了 pynput 来收听按键,并让大部分工作都按我的预期工作。但是,我有一个问题,如果我通过听键盘并在按键上做某事来“重新绑定”一个键,它仍然会发送原始命令。我不了解 DirectInput 幕后的事情,更不用说在此之上的所有层了,所以很难解释我的问题。
我想要的示例(“重新绑定”F3 到鼠标单击):
Press F3
Mouse click input is sent
发生情况的示例:
Press F3
F3 input is sent
Mouse click input is sent
如何防止发送多余的密钥,所以只发送我的“反弹”动作?
解决方案
当你设置你的键盘监听器时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
您用来“重新绑定”热键的相同机制进行注册。
推荐阅读
- android - 如何在运行时更改按钮形状样式?
- c++ - 为什么这个 C++ 折叠表达式有效?
- php - 使用 SSL 与远程数据库的 PDO 连接;验证服务器证书时出现 FastCGI 错误
- node.js - 在express中用get方法替换delete
- excel - VBA - 在变量工作簿中查找
- node.js - 节点js中sequelize中的多个表连接问题
- reactjs - 在网站的不同页面上显示反应元素
- spring - 在通过该标签搜索图像时获取标签作为 json 中返回的附加对象
- ios - 使用 SCNGeometry 进行关键值观察以获取详细程度
- lotus-notes - Lotus Notes 应用程序打开消息