python - Windows 上的 python 输入优化?(和Xbox指南按钮可能检测到?)
问题描述
简而言之:关于如何收听 Xbox 指南按钮的任何建议?或有关如何使低端 PC 的“输入”更优化和更快的任何建议?
嘿。我一直在寻找一种使 Windows 上的屏幕截图更容易的方法。目前唯一的内置功能是 win+prtsc ,在游戏中使用控制器时很难按。我也恰好擅长编程,但我对python上的输入库不熟悉......
所以我使用“pyautogui”库来模拟按下win+prtSc,并使用“pynput”库来听键盘上的按钮“/”来做截图(嗯,作弊截图。windows正在截图,我只是模拟按下 "win+prtSc" ,所以我将我的脚本命名为 "screenshit" )。
到目前为止,一切都很好。
每个屏幕截图都按“/”按钮并不难。但为了扩展它,我想使用我的控制器来截取屏幕截图。但问题是pynput 不支持游戏手柄控制器!所以我使用了另一个名为“inputs”的库。这个确实支持游戏手柄控制器。但是它使用至少 30% 的 CPU 使用率来工作……这很糟糕!这是使用“输入”库检测开始(通常的地图按钮)的代码:
while 1:
events = get_gamepad()
if events:
print(events[0].code)
if events[0].code == 'START' :
ScreenShot()
我猜 'get_gamepad()' 不够优化......但如果我错了或使用错了,请指导我!
所以,我想使用的另一件事是 center/guide/xbox 按钮。此按钮: xbox 中心按钮
但“输入”和“pynput”库似乎都没有听这个按钮......
关于如何收听此按钮的任何建议?
或者
关于如何使低端 PC 的“输入”更优化和更快的任何建议?
解决方案
Python 的inputs
库在 Windows 上使用 XInput API 进行游戏手柄输入,这有一些内置限制。在 XInput 中,应用程序使用以下方法访问当前游戏手柄状态XInputGetState
:
https://docs.microsoft.com/en-us/windows/win32/api/xinput/nf-xinput-xinputgetstate
按钮和轴状态在一个XINPUT_GAMEPAD
结构中返回,它甚至没有办法表示 Xbox 按钮。一些应用程序通过调用与 Xbox 按钮状态具有相同签名XInputGetState
并以相同格式返回数据XINPUT_GAMEPAD
但包含一个额外位与 Xbox 按钮状态的替代(未记录)方法来解决此问题。
https://www.google.com/search?q=%22XInputGetStateEx%22
即使您使用未记录的 API 方法,除非您禁用在按下 Xbox 按钮时启动 Xbox Game Bar 的 Windows 设置,否则您仍然不会获得 Xbox 按钮输入。启用此设置后,所有其他应用程序的 Xbox 按钮将被禁止。
另请注意,XInput 没有任何类型的输入事件。每次调用XInputGetState
它只是根据最近的输入返回游戏手柄的当前状态。调用它的速度超过 250Hz 是不必要的,因为这是 Xbox 控制器可以发送新输入的最快速度。对于您的屏幕截图应用程序,60Hz 应该足够了。这意味着在对get_gamepad
.
推荐阅读
- python - 机器学习语言中的规范化是什么意思?它对应一个样本吗?
- awesome-wm - AwesomeWM - 打开/关闭窗口回调
- python - 如何使用 2 个条件属性对 python 列表进行排序
- javascript - 函数 moveon() - Javascript 权威指南 6/E
- java - 具有至少一个任何类型注释的方法的切入点
- javascript - 有什么方法可以从 AVI 视频文件中创建 ObjectURL?
- javascript - Angular 6外部js,css参考不起作用
- javascript - 与单个复选框交互后,无法在取消选中/选中标题复选框时取消选中/选中复选框 - Vuejs
- curl - Telegram Bot,发送文件的占位符?
- ubuntu - CURL - 没有输出到终端 - Ubuntu 14.04