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 失败 的相关文章

  • 在“打开方式...”上下文菜单中命名程序

    如何自定义程序中可见的名称打开用 Windows XP 和 7 中的上下文菜单 例如 我有 3 个版本的产品 名为XYZ安装在 Windows 上 x文件关联到xyz exe COM 注册 该产品的所有版本都具有相同的 exe姓名 现在在打
  • 如何在没有驱动的情况下从USB读取数据?

    我们正在创建带有 GPS 接收器和 PC 的小型系统 我们想测试我的 GPS 接收器 我们不想一开始就找司机 首先我想测试我的电路是否工作 GPS IC 已设置为输出 NMEA 语句 我们想要一个只从 USB 端口读取数据并将其打印在屏幕上
  • 使用加密 API 导入 DER 编码的公钥

    是否可以使用 MS crypto API 导入 DER 编码的公钥 那么我可以验证签名吗 我需要 MS Crypto API 的一段代码或帮助来导入 DER 编码的公钥 证书 以下三个步骤将允许您导入公钥证书 使用获取证书上下文证书创建证书
  • SQL Server Express(或任何版本)可以在 RPi 上运行吗?

    我注意到完整版的 Windows 10 可以在 RPI 3 上运行 我想知道 SQL Server Express 或任何其他版本 是否可用于 ARM 版本的 Windows 我在任何地方都看不到它 所以我怀疑答案是否定的 但想检查一下我是
  • robocopy 脚本:系统资源不足

    我有一个之前可以运行的脚本 一个机器人复制脚本 备份服务器坏了 新的服务器丢失了一些配置 但我不是 Windows 用户 脚本如下 C Windows system32 Robocopy F Equipos NASSERVERBACKUP
  • 如何在Windows中收集每个服务名称及其状态?

    我想在不使用任何第三方工具的情况下获取所有 service name 及其状态 迄今为止SC http ss64 com nt sc html命令足以获取其中一个值 例如 sc query findstr SERVICE NAME 但我还需
  • 在新窗口中打开 SAS 程序

    目前 当您在 Windows 中双击 SAS 文件时 它将在您已打开的现有 SAS 会话中打开它 有没有办法让它在窗口中单击时会启动一个新的 SAS 窗口 据我所知 SAS 是一个所谓的 单实例 应用程序 因此它的默认行为是在现有会话中打开
  • 为什么我的文件路径中出现 Unicode 转义的语法错误? [复制]

    这个问题在这里已经有答案了 我想要访问的文件夹名为 python 位于我的桌面上 当我尝试访问它时出现以下错误 gt gt gt os chdir C Users expoperialed Desktop Python SyntaxErro
  • R 脚本自动化时的不同结果

    以下命令对 pdf 文件执行 Ghostscript 这pdf file变量包含该 pdf 的路径 bbox lt system paste C gs gs8 64 bin gswin32c exe sDEVICE bbox dNOPAUS
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • 批处理文件 FOR /f 标记

    任何人都可以逐行准确解释以下代码是如何工作的 我真的迷路了 我一直在尝试学习如何使用 FOR 命令 但我不明白这一点 echo off for f tokens delims f in myfile do set line f call p
  • Windows Workflow Foundation 4 (WF4) 延迟

    我正在与 Visual Studio 2010 的候选版本一起使用 Wf4 编写一个用于批准资源请求的新工作流程 在我的工作流程中 如果请求未获得批准 我希望请求在几天后过期 我们在 WF 3 5 Visual Studio 2008 中通
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 更改 mingw' 启动目录或创建 mingw 符号链接

    设置 mingw 控制台启动目录的最简单方法是什么 我只使用 mingw 进行编译 但由于缺乏编辑器甚至符号链接 我很困惑如何告诉 mingw 控制台出现在不同的目录而不是常规的主目录中 如果有人知道如何像 cygwin 那样将 真正的 符
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 检测计算机何时解锁 Windows

    我用过这个优秀的方法 https stackoverflow com questions 20733441 lock windows workstation using python 20733443锁定 Windows 计算机 那部分工作
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是

随机推荐

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

    我正在构建一些单元测试 发现我的代码给出了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