Python LocateOnScreen 在全屏模式下不工作

Python LocateOnScreen not working in fullscreen

大家好,我是 python 的新手,我花了大约 30 个小时来弄清楚如何解决这个问题。抱歉,时间太长了,我试着提供尽可能多的关于我已经尝试过的信息。

我正在使用 pyautogui locateOnScreen() 在全屏游戏中搜索在我的站立角色范围内行走的猫。问题是当我在我的游戏前打开脚本时 shell 或命令提示符 window 运行 找到图像但是如果我启动脚本并聚焦游戏屏幕立即,根本找不到图像。

我创建了一个只有找猫部分的新脚本,因为主脚本的其余部分只是对 运行 猫的键盘输入命令,然后静止不动。

import pyautogui
import time
import win32api
import keyboard  # in my main script I use hotkeys and keyboard seemed to be the simplest route

def main():
    time.sleep(3)
    print('ok ready')

    while not keyboard.is_pressed('c'):
        if pyautogui.locateOnScreen('catplant.png', region=(260, 450, 300, 250), confidence=0.4) is not None:
            print('cat found')
            keyboard.press('o') # pushes button to start interacting with the cat when found
        else:
            print('cat not found')
        time.sleep(0.1)


if __name__ == '__main__':
    main()

注意:该区域是 100% 正确的 + 额外范围,因为我可以通过命令 window open 找到猫,我使用 win32api.SetCursorPos 和 for 循环来勾勒出范围然后进行测试看看猫什么时候应该在范围内。此外,置信度必须为 40-50%,因为背景似乎与猫图像太相似,而且猫在行走时有不同的动画。

最让我恼火的是,有时当只有 print('cat found') 行时,它会显示找到了猫,尽管仍然不一致。找到猫后,一旦我添加任何命令、鼠标单击或键盘输入,除了打开命令 window 之外,脚本根本找不到图像。当 print 被任何其他命令替换时也不起作用。我尝试添加延迟,因为我知道该功能可能很慢。没用。

我已经检查过活动 window 是游戏,使用代码只是为了确保结果仍然相同。

此外,当我 运行 脚本和猫时,只要我按 alt+tab 就找不到猫,如果在范围内,有时也会找到猫,尽管 [=34= 】 现在藏猫了。然而,当我在其他情况下用 windows 隐藏猫时,这不起作用,例如在油漆中的猫的图片或在前景中以命令提示符 window 开头。

我可能不是很有经验,但我感觉这可能是 pyautogui 的问题。如果我找不到解决方案,我将不得不求助于 OpenCV,这看起来相当复杂,我现在不想进入它。感谢您花时间阅读并尝试为我解决这个问题。这是我第一次 post 在这个网站上。

更新我终于找到了一个解决方案,阅读了一个关于全屏游戏中鼠标输入的旧线程。我 运行 我在屏幕上定位游戏时处于边框模式,并且运行良好。由于某种原因全屏不工作