关于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 源代码,并且可以参考我已经完成的工作,所以它应该只是大量的复制/粘贴并填写空白类型的东西。当然还有测试。

  • 20
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 首先,需要安装 pyautogui 库: ``` pip install pyautogui ``` 然后,在 Python 中导入 pyautogui 库: ``` import pyautogui ``` 接下来,使用 pyautogui 的 typewrite() 函数输入文字: ``` pyautogui.typewrite('要输入的文字') ``` 如果要在指定的聊天窗口中输入文字,需要先使用 pyautogui 的 moveTo() 函数将鼠标移动到聊天窗口的输入框位置,然后再使用 typewrite() 函数输入文字。 例如: ``` import pyautogui # 将鼠标移动到聊天窗口的输入框位置 pyautogui.moveTo(x, y) # 输入文字 pyautogui.typewrite('要输入的文字') ``` 注意:使用 pyautogui 模拟鼠标操作时,应尽量避免在工作时间使用,以免干扰正常工作。 ### 回答2: 使用pyautogui可以模拟鼠标和键盘操作,实现在指定的聊天窗口输入文字的功能。具体步骤如下: 首先,我们需要导入pyautogui库。可以使用以下命令: ```python import pyautogui ``` 然后,我们需要定位到指定的聊天窗口。可以使用pyautogui的定位函数来获取聊天窗口的坐标。例如,可以使用以下命令来获取鼠标当前位置的坐标: ```python x, y = pyautogui.position() ``` 也可以通过其他方式获取聊天窗口的坐标,如通过屏幕截图进行模板匹配等。 接下来,我们可以使用pyautogui的鼠标点击函数来定位光标到聊天窗口的文本输入框处。例如,可以使用以下命令将鼠标定位到指定的坐标(x, y)处并点击: ```python pyautogui.click(x, y) ``` 然后,我们可以使用pyautogui的键盘输入函数来输入文字。例如,可以使用以下命令输入一个字符串"Hello World": ```python pyautogui.typewrite("Hello World") ``` 如果想要模拟按下回车键进行发送,可以使用以下命令: ```python pyautogui.press("enter") ``` 最后,我们可以使用pyautogui的鼠标移动函数将光标移动到聊天窗口之外,以便继续进行其他操作。例如,可以使用以下命令将鼠标移动到指定的坐标(x, y)处: ```python pyautogui.moveTo(x, y) ``` 综上所述,我们可以使用pyautogui在指定的聊天窗口中输入文字。这是一种模拟人工操作的方式,可以简化一些重复性的操作。 ### 回答3: 使用pyautogui可以实现在指定的聊天窗口输入文字。下面是实现的步骤: 1. 首先,我们需要导入pyautogui库:import pyautogui 2. 接下来,我们需要获得聊天窗口的位置坐标。可以使用pyautogui.locateOnScreen()方法来定位聊天窗口的图像。 3. 一旦我们获得了聊天窗口的位置坐标,我们就可以在该位置上点击一下,将聊天窗口设为活动窗口pyautogui.click(x, y) 4. 然后,我们可以使用pyautogui.typewrite()方法来输入我们想要发送的消息:pyautogui.typewrite('你好') 5. 最后,我们可以按下Enter键,发送消息:pyautogui.press('enter') 完整的代码如下: import pyautogui # 获取聊天窗口位置 chatbox_position = pyautogui.locateOnScreen('chatbox.png') # 将聊天窗口设为活动窗口 pyautogui.click(chatbox_position.x, chatbox_position.y) # 输入文字 pyautogui.typewrite('你好') # 发送消息 pyautogui.press('enter') 需要注意的是,为了使程序正常工作,我们需要确保聊天窗口的图像被正确地识别出来,并且需要提前准备好chatbox.png图像文件来进行图像识别。另外,我们还可以使用其他pyautogui库提供的方法来定位聊天窗口,比如使用屏幕上的特定位置坐标等。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值