Pyautogui 和 pyscreeze 崩溃,windll.user32.ReleaseDC 失败

2023-12-25

我正在尝试比较 pyautogui 脚本中的某些像素值,但在多次成功运行后,或者有时直接在第一次调用时,它会崩溃并显示以下错误消息:

Traceback (most recent call last):
  File "F:\Koodit\Python\HeroWars NNet\Assets\autodataGet.py", line 219, in <module>
    battle = observeBattle()
  File "F:\Koodit\Python\HeroWars NNet\Assets\autodataGet.py", line 180, in observeBattle
    statii = getHeroBattlePixels()
  File "F:\Koodit\Python\HeroWars NNet\Assets\autodataGet.py", line 32, in getHeroBattlePixels
    colormatch = pyautogui.pixelMatchesColor(location[0], location[1], alive, tolerance=5)
  File "E:\Program Files\Python\lib\site-packages\pyscreeze\__init__.py", line 557, in pixelMatchesColor
    pix = pixel(x, y)
  File "E:\Program Files\Python\lib\site-packages\pyscreeze\__init__.py", line 582, in pixel
    return (r, g, b)
  File "E:\Program Files\Python\lib\contextlib.py", line 120, in __exit__
    next(self.gen)
  File "E:\Program Files\Python\lib\site-packages\pyscreeze\__init__.py", line 111, in __win32_openDC
    raise WindowsError("windll.user32.ReleaseDC failed : return 0")
OSError: windll.user32.ReleaseDC failed : return 0

我的代码(这被调用多次,有时第一次运行时会崩溃,有时在失败之前可以很好地运行大约 100 次调用,而且我的屏幕是 4K,所以分辨率变大):

def getSomePixelStatuses():
    someLocations= [
                        [1200, 990],
                        [1300, 990],
                        [1400, 990],
                        [1500, 990],
                        [1602, 990],
                        [1768, 990],
                        [1868, 990],
                        [1968, 990],
                        [2068, 990],
                        [2169, 990]
                        ]
    status = []
    someValue= (92, 13, 12)
    for location in someLocations:
        colormatch = pyautogui.pixelMatchesColor(location[0], location[1], someValue, tolerance=5)
        status.append(colormatch)
    return status

我不知道如何缓解这个问题。似乎 pyautogui 使用 pyscreeze 读取屏幕上的像素值,发生错误的地方最有可能的候选者是 pyscreeze 像素函数:

def pixel(x, y):
    """
    TODO
    """
    if sys.platform == 'win32':
        # On Windows, calling GetDC() and GetPixel() is twice as fast as using our screenshot() function.
        with __win32_openDC(0) as hdc: # handle will be released automatically
            color = windll.gdi32.GetPixel(hdc, x, y)
            if color < 0:
                raise WindowsError("windll.gdi32.GetPixel failed : return {}".format(color))
            # color is in the format 0xbbggrr https://msdn.microsoft.com/en-us/library/windows/desktop/dd183449(v=vs.85).aspx
            bbggrr = "{:0>6x}".format(color) # bbggrr => 'bbggrr' (hex)
            b, g, r = (int(bbggrr[i:i+2], 16) for i in range(0, 6, 2))
            return (r, g, b)
    else:
        # Need to select only the first three values of the color in
        # case the returned pixel has an alpha channel
        return RGB(*(screenshot().getpixel((x, y))[:3]))

我昨天安装了这些库,并且在 Windows 10 上运行 python 3.8,而 pyscreeze 的版本是 0.1.25,所以理论上一切都应该是最新的,但不知何故,有些东西最终崩溃了。有没有办法缓解这种情况,要么修改我的代码,甚至修改库本身,要么我的环境不适合此操作?


嗯,我知道这不是特别有帮助;但对我来说,只需在 3.7 而不是 3.8 上运行我的代码即可修复此错误。但是,您不必对代码进行任何更改(除非您使用的是 walrus!)

在 Windows 上,这可以通过-3.7命令行标志,只要安装了3.7

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pyautogui 和 pyscreeze 崩溃,windll.user32.ReleaseDC 失败 的相关文章

随机推荐

  • 循环向量化给出了不同的答案

    我正在构建一些单元测试 发现我的代码给出了slightly矢量化时会产生不同的结果 在下面的示例中 一个数组a一维求和并添加到初始值x 大多数元素a太小而无法改变x 代码是 module datamod use ISO FORTRAN EN
  • Int 列表与 Int -> Int 列表相比,类型相同吗?

    为什么这两个有相同的类型 ghci gt k Int Int ghci gt k Int gt Int Int gt Int EDIT per 加布里埃尔 冈萨雷斯 https stackoverflow com users 1026598
  • 如何向 Laravel 工厂传递参数?

    我有一个users表和一对零 一的关系businesses表 users user id gt businesss user id 在我的users表我有一个鉴别器 它告诉我用户是否属于商务类型 因此我需要了解有关的详细信息business
  • iOS Apple TestFlight 版本需要什么样的证书和配置文件?

    我计划通过新的 Apple TestFlight 应用程序在 iOS 8 设备上发布 iPhone 应用程序的测试版 为此需要什么样的证书和配置文件 我需要一个生产证书和分配配置文件 可用的是这些 Certificate Pending D
  • 如何获得 sed 中的第 10 个分组值?

    这是我的 sed sed s a z A Z 0 9 a z A Z 0 9 a z A Z 0 9 a z 10 g 我试图获得第 10 个分组值 但是 它给出的第一个分组值是 0 零 如何获得第10个分组值 能否得到第10个分组值 se
  • JSON 包含条件

    我的设置 Rails 2 3 10 Ruby 1 8 7 假设我有这个代码片段 user User find 1 user to json include gt posts 如果我想包含具有特定条件的用户帖子 例如仅一周前的帖子 怎么办 定
  • 如何跟踪 php 函数/代码的处理持续时间

    我正在开发一个基于浏览器的游戏 我想知道哪些功能需要最多时间来处理等等 你们有人知道我可以从什么开始吗 使用 PHP 5 3 听起来像你想要的xhprof http pecl php net package xhprof 它擅长分析
  • Objectdatasource 和 Gridview:排序、分页、过滤

    我使用实体框架 1 0 并尝试使用可以访问我的外观的对象数据源提供 Gridview 问题是 这似乎特别困难 而且在互联网上还没有看到任何真正能做到我想要它做的事情 对于那些知道的人来说 使用对象数据源提供的网格视图无法自动排序 因此您必须
  • 无法加载资源:服务器响应状态为 403 - Image

    我发现角度和加载图像时遇到一些问题 我从 API 检索图像的链接 并将恢复的链接分配给图像的来源 但是 某些图像无法加载 并且我在 Chrome 控制台中收到以下错误 Failed to load resource the server r
  • UL 列出带有样式十进制数字的项目[重复]

    这个问题在这里已经有答案了 我需要创建一组列表项 其中需要使用边框半径和背景颜色设置列表项编号 小数 的样式 这是我希望列表项的外观的快照 我尝试在 li 上放置边框半径和背景 但我无法获得我正在寻找的输出 这里有一个工作链接 http j
  • 如何迭代 S3 存储桶中的文件?

    我有大量文件 gt 1 000 存储在 S3 存储桶中 我想迭代它们 例如 在for循环 使用以下方法从中提取数据boto3 然而 我注意到 根据http boto3 readthedocs io en latest reference s
  • 如何在不使用 Perl 和 LWP 获取页面的情况下获得最终 URL?

    我正在做一些网页抓取 http en wikipedia org wiki Web scraping使用 Perl 的 LWP 我需要处理一组 URL 其中一些可能会重定向 一次或多次 如何使用 HEAD 方法获得解决所有重定向的最终 UR
  • 在 WPF Tabcontrol 标头模板中显示 SelectedIndex

    我的应用程序中有 1 n 个选项卡控件 具有以下 XAML 设置
  • 在测试用例 espresso 之前清除数据库

    我使用 espresso 来清除我的应用程序中的数据库 我像这样设置活动 Rule JvmField val activity ActivityTestRule
  • 以循环结构将元素附加到 DOM

    加载页面后 我想为页面上的每个现有元素添加一个附加元素 我尝试过这样的事情 var divs document getElementsByTagName div for i 0 i
  • 如何在点击浏览器刷新按钮时弹出警告框?

    如果用户刷新有问题的页面 它将向数据库添加另一条记录 因此我想通过警告框警告用户 如果他们确实想要刷新页面 并且如果他们单击 确定 则应该刷新页面 否则如果他们点击取消就不会了 如何以跨浏览器兼容的方式让点击浏览器刷新按钮时出现这种类型的警
  • 在应用程序配置中找不到 LocalSqlServer 或连接字符串为空

    我刚刚将 NET 3 5 MVC 1 项目升级到 NET 4 0 MVC 3 由于某种原因 当我尝试运行它时 它显示 在应用程序中找不到连接名称 LocalSqlServer 配置或连接字符串为空 我不确定它为什么这样做 因为它在我的代码中
  • WinRT ViewModel DataBind 到异步方法

    我正在反序列化 XML 文件中的对象列表 并希望通过 ViewModel 传递到我的视图中这些对象的实际内容 问题是文件操作是async并且它一直冒泡到 ViewModel 其中 Property getters 不能被标记为这样 Prob
  • SQL Server批量导入UTF-8数据格式文件

    我一直在参考以下页面 http msdn microsoft com en us library ms178129 aspx http msdn microsoft com en us library ms178129 aspx 我只是想从
  • Pyautogui 和 pyscreeze 崩溃,windll.user32.ReleaseDC 失败

    我正在尝试比较 pyautogui 脚本中的某些像素值 但在多次成功运行后 或者有时直接在第一次调用时 它会崩溃并显示以下错误消息 Traceback most recent call last File F Koodit Python H