python中的win32api.setcursorpos错误

python中的win32api.setcursorpos错误,python,winapi,keyboard,win32com,pyautogui,Python,Winapi,Keyboard,Win32com,Pyautogui,好的,我正在做一个“简单”的机器人,应该可以玩 在一些教程的帮助下,我编写了这段代码 from pyautogui import * import pyautogui import time import keyboard import random import win32api, win32con #color (255,219,195) run = False def clicker(x,y): win32api.SetCursorPos((x,y)) win32ap

好的,我正在做一个“简单”的机器人,应该可以玩

在一些教程的帮助下,我编写了这段代码

from pyautogui import *
import pyautogui
import time
import keyboard
import random
import win32api, win32con


#color (255,219,195)
run = False

def clicker(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)

while keyboard.is_pressed('w') == False:
        if keyboard.is_pressed('d') and run == False:
                run = True
        if keyboard.is_pressed('a') and run == True:
                run = False
        if run == True:
                if keyboard.is_pressed('d') and run == False:
                        run = True
                if keyboard.is_pressed('a') and run == True:
                        run = False
                pic = pyautogui.screenshot(region=(570,440,1330-570,975-440))
                width, height = pic.size

                for x in range (0,width,5):
                        for y in range(0,height,5):
                                r, g, b = pic.getpixel((x,y))

                                if r == 255 and g == 219 and b ==195:
                                        clicker(x+570,y+440)
                                        time.sleep(0.1)
                                        print("click")
                                        break
但在我开始运行代码6分钟后,它会给我

Traceback (most recent call last):
  File "C:\Users\angel\OneDrive\Escritorio\bot_tutorials\acurrate.py", line 35, in <module>
    clicker(x+570,y+440)
  File "C:\Users\angel\OneDrive\Escritorio\bot_tutorials\acurrate.py", line 13, in clicker
    win32api.SetCursorPos((x,y))
pywintypes.error: (0, 'SetCursorPos', 'No error message is available')
回溯(最近一次呼叫最后一次):
文件“C:\Users\angel\OneDrive\Escritorio\bot\u tutorials\acurrate.py”,第35行,在
点击器(x+570,y+440)
clicker中第13行的文件“C:\Users\angel\OneDrive\Escritorio\bot\u tutorials\acurrate.py”
win32api.SetCursorPos((x,y))
pywintypes.error:(0,'SetCursorPos','没有可用的错误消息')
或IOR错误:屏幕抓取失败

我不知道你是否需要这个,但我的电脑是1920×1080像素,它是一个窗口


提前感谢您

是否在6分钟内没有可用的
错误消息
发生?我没有重现您的问题,
IOError
似乎是由
ImageGrab
引起的,但您的代码没有调用它。它只是在随机时间发生,通常在6分钟后返回(最近一次调用最后一次):文件“C:\Users\angel\OneDrive\Escritorio\bot\u tutorials\acurrate.py”,第28行,在pic=pyautogui.screenshot中(region=(5704401330-570975-440))文件“C:\Program Files\Python37\lib\site packages\pyscreeze_init_uu2;.py”,第135行,包装器返回包装函数(*args,**kwargs)文件“C:\Program Files\Python37\lib\site packages\pyscreeze_init_2;.py”,第427行,在win32 im=ImageGrab()文件中“C:\Program Files\Python37\lib\site packages\PIL\ImageGrab.py”,第54行,在grab-1中,文件“C:\Program Files\Python37\lib\site packages\PIL\Image.py”,第2657行,在frombytes im=new(mode,size)文件“C:\Program Files\Python37\lib\site packages\PIL\Image.py”,第2621行,在新的返回im.\u new(core.fill(mode,size,color))请从最小的代码示例开始。您提供的代码示例不显示
pywintypes.error
(即使经过很长一段时间),并且您调用
SetCursorPos
的方式是正确的。注意:将完整样本划分为多个较小的样本将有助于快速解决问题。是否
在6分钟内没有可用的错误消息
发生?我没有重现您的问题,
IOError
似乎是由
ImageGrab
引起的,但是您的代码没有调用它。它只是在随机时间发生,通常在6分钟后返回(最后一次调用):文件“C:\Users\angel\OneDrive\Escritorio\bot\u tutorials\acurrate.py”,第28行,在pic=pyautogui.screenshot(region=(5704401330-570975-440))文件“C:\Program Files\Python37\lib\site packages\pyscreeze\u init.py,第135行,在包装器返回wrappedFunction(*args,**kwargs)文件“C:\Program Files\Python37\lib\site packages\pyscreeze\u init\uuuz.py”中,第427行,在抓取-1文件中的C:\Program Files\Python37\lib\site packages\PIL\ImageGrab.py()文件“C:\Program Files\Python37\lib\site packages\PIL\ImageGrab.py”中“C:\Program Files\Python37\lib\site packages\PIL\Image.py”,第2657行,在frombytes im=new(mode,size)文件中,“C:\Program Files\Python37\lib\site packages\PIL\Image.py”,第2621行,在new return im.\u new(core.fill(mode,size,color))请从最小的代码示例开始。您提供的代码示例不显示
pywintypes.error
(即使经过很长一段时间),并且您调用
SetCursorPos
的方式是正确的。注意:将完整示例划分为多个较小的示例将有助于快速解决问题。