关于pyautogui在游戏窗口不工作解决办法

那么为什么 PyAutoGUI 不适用于某些视频游戏呢?在 Windows 上,PyAutoGUI 使用稍旧的、略微弃用的 Windows API 来模拟鼠标和键盘输入。通常这很好,但是当您与大量使用 DirectX 的程序交互时,就像大多数 3D 视频游戏一样,您可能会遇到问题。如果您不知道 DirectX 是什么,它只是由 Microsoft 编写的库和 API 的集合,用于简化视频游戏开发。它非常成功,这基本上就是 Windows 主导 PC 游戏的原因。 DirectX 的子集之一是 DirectInput。 DirectInput 基本上是视频游戏开发人员在处理游戏的用户输入时使用的更简单、更强大的界面。很多时候,游戏开发者会选择只支持 DirectInput,因为它的开发较少而且玩家不太可能注意到。

因此,为了解决我们遇到的问题,我们只需要让 PyAutoGUI 使用 DirectInput Windows API,而不是它当前使用的 API。所以我写了一个 Python 包来做到这一点。我称它为 PyDirectInput。为了准确了解 PyAutoGUI 做错了什么,以及我的库如何修复它,让我向您阅读 README 的开头段落,然后我将向您展示如何在实践中使用它。

“这个库旨在复制 PyAutoGUI 鼠标和键盘输入的功能,但通过利用 DirectInput 扫描代码和更现代的 SendInput() win32 函数。PyAutoGUI 使用虚拟键代码 (VK) 和已弃用的 mouse_event() 和 keybd_event() win32 函数。你可能会发现 PyAutoGUI 在某些应用程序中不起作用,特别是在视频游戏和其他依赖 DirectX 的软件中。如果你发现自己处于这种情况,试试这个库!

您只需使用以下命令安装 PyDirectInput: pip install pydirectinput

如果你有一个像这样的简单 PyAutoGUI 脚本:

import pyautogui
import time

time.sleep(4)
pyautogui.keyDown('w')
time.sleep(1)
pyautogui.keyUp('w')

Python

您只需将 pyautogui 替换为 pydirectinput 即可使用 DirectInput 游戏。我已经使两个项目之间的所有函数声明都相同,因此您可以轻松地在它们之间进行交换。

import pyautogui
import pydirectinput
import time

time.sleep(4)
pydirectinput.keyDown('w')
time.sleep(1)
pydirectinput.keyUp('w')

Python

我还没有在 PyDirectInput 中实现 PyAutoGUI 的所有功能。您应该继续使用 PyAutoGUI 的所有屏幕阅读功能。另一个大问题是持续时间的鼠标移动,它在屏幕上缓慢移动光标,我还没有实现。当您使用 PyDirectInput 中的 moveTo() 功能时,它会立即跳转到屏幕上的那个位置。在 README 中,我已经注意到我没有时间移植的所有功能。

因此,如果您需要这些缺失的任何功能,这是参与开源项目的绝佳机会。当您有工作时向我发送拉取请求,或者如果您需要帮助,我很乐意与您合作。如果您在此之前从未为开源做出过贡献,那么这应该是一种非常友好的进入方式,因为您可以查看所有 PyAutoGUI 源代码,并且可以参考我已经完成的工作,所以它应该只是大量的复制/粘贴并填写空白类型的东西。当然还有测试。

你可能感兴趣的:(pyautogui,游戏,microsoft,windows)