1

我编写了一个简单的Osu!bot,但它不起作用。在我打开(全屏)osu 之前,我没有收到任何错误。我试过用管理员从 cmd 运行它,但它不起作用。我收到此错误:

Traceback(最近一次通话最后一次):文件“C:/Users/Kris/PycharmProjects/OsuBot/venv/drums.py”,第 7 行,在 if pyautogui.pixel(609, 440)[0] == 235: File 中C:\Users\Kris\AppData\Local\Programs\Python\Python38\lib\pyscreez_init _.py ”,第 584 行,以像素返回 (r, g, b) 文件“C:\Users\Kris\AppData\ Local\Programs\Python\Python38\lib\contextlib.py”,第 120 行,退出next( self.gen ) 文件“C:\Users\Kris\AppData\Local\Programs\Python\Python38\lib\ pyscreez_init_ .py",第 113 行,在 __win32_openDC 中引发 WindowsError("windll.user32.ReleaseDC failed : return 0") OSError: windll.user32.ReleaseDC failed : return 0

进程以退出代码 1 结束

从 IDLE、cmd 和 PyCharm 运行时出现错误。

这是我的代码:

import pyautogui
import keyboard
import time

while 1:
    if pyautogui.pixel(609, 440)[0] == 235:
        keyboard.press('x')
        time.sleep(0.1)
        keyboard.release('x')
    if pyautogui.pixel(609, 440)[0] == 67:
        keyboard.press('z')
        time.sleep(0.1)
        keyboard.release('z')
    time.sleep(0.01)

# X:  609 Y:  440 RGB: ( 32,  99, 222)
# RED = X: 1534 Y:  485 RGB: (235,  69,  44)
# BLUE = X: 1138 Y:  459 RGB: ( 67, 142, 172)

提前致谢。

4

1 回答 1

0

看起来pyautogui像素识别有一些问题,因为我也尝试过pyautogui.pixel(),我似乎得到了相同的结果,OSError: windll.user32.ReleaseDC failed : return 0但是由于某种原因,它工作了一半时间,我让代码正常运行。不知道为什么,除了连续几次重新运行程序直到它工作之前,我什么也没做。

您可以尝试pillow使用pip install pillow具有getpixel()功能的库。您必须先截取屏幕截图,但幸运pyautogui的是已涵盖:

from PIL import Image
import pyautogui as py

py.screenshot('file.png')

img = Image.open('file.png')
print(img.getpixel((180, 90)))

我看到您也在使用该keyboard库,但老实说,您可以只使用pyautogui它,然后您就不需要导入额外的库。

最终代码

import time
from PIL import Image
import pyautogui as py

while 1:

    py.screenshot('file.png')
    img = Image.open('file.png')
    
    if img.getpixel((609, 440))[0] == 235:
        py.press('x')
    if img.getpixel((609, 440))[0] == 67:
        py.press('z')
    time.sleep(1)
于 2020-12-08T19:43:38.550 回答