首页 > 解决方案 > PyAutoGUI 间歇性失败,“WindowsError("windll.user32.ReleaseDC failed : return 0")

问题描述

我创建了一个简单的程序;它在适合我的屏幕分辨率的钢琴游戏中点击黑色瓷砖。该程序按预期工作,但偶尔会间歇性崩溃。该问题似乎与pyautogui.pixel(x, y). 我在网上找不到解释或原因,只建议在早期版本的 Python 上运行该程序。

眼镜

Operating System : Windows-10-10.0.19041-SP0
Python Version : 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit(AMD64)]
IDE : PyCharm Community Edition 2020.3.4.lnk
PyAutoGUI Version : 0.9.52

代码

import pyautogui
import time
import keyboard

totalClicks = 0
pyautogui.PAUSE = 0.0

while keyboard.is_pressed('q') == False:

    # There are 4 rows of tiles, if pixel is black, click pixel
    if (pyautogui.pixel(350, 310)[0]) == 0: # tile1
        pyautogui.moveTo(350, 310)
        pyautogui.mouseDown()
        time.sleep(0.03)
        pyautogui.mouseUp() 
        totalClicks += 1
    elif (pyautogui.pixel(423, 310)[0]) == 0: # tile2
        pyautogui.moveTo(423, 310)
        pyautogui.mouseDown()
        time.sleep(0.03)
        pyautogui.mouseUp()
        totalClicks += 1
    elif (pyautogui.pixel(527, 310)[0]) == 0: #tile3
        pyautogui.moveTo(527, 310)
        pyautogui.mouseDown()
        time.sleep(0.03)
        pyautogui.mouseUp()
        totalClicks += 1
    elif (pyautogui.pixel(600, 310)[0]) == 0: #tile4
        pyautogui.moveTo(600, 310)
        pyautogui.mouseDown()
        time.sleep(0.03)
        pyautogui.mouseUp()
        totalClicks += 1

print(totalClicks)

exit(0)

错误

C:\Users\shawn\PycharmProjects\pythonProject5\venv\Scripts\python.exe C:/Users/shawn/PycharmProjects/pythonProject5/main.py
Traceback (most recent call last):
  File "C:\Users\shawn\PycharmProjects\pythonProject5\main.py", line 18, in <module>
    if (pyautogui.pixel(350, 310)[0]) == 0: # if pixel is black...
  File "C:\Users\shawn\PycharmProjects\pythonProject5\venv\lib\site-packages\pyscreeze\__init__.py", line 584, in pixel
    return (r, g, b)
  File "C:\Users\shawn\AppData\Local\Programs\Python\Python39\lib\contextlib.py", line 124, in __exit__
    next(self.gen)
  File "C:\Users\shawn\PycharmProjects\pythonProject5\venv\lib\site-packages\pyscreeze\__init__.py", line 113, in __win32_openDC
    raise WindowsError("windll.user32.ReleaseDC failed : return 0")
OSError: windll.user32.ReleaseDC failed : return 0

Process finished with exit code 1

标签: pythonerror-handlingpyautogui

解决方案


推荐阅读