为什么 pyautogui 不会在绘图软件中突出显示和使用键盘动作? 这可以修复吗

问题描述

我正在使用 pixeltudio 为一些东西制作动画。我能够自动化它。但是,pyautogui 按键和鼠标拖动交互不起作用。点击工作,但拖动以突出显示键盘箭头按下不起作用。我在我的桌面上测试了代码 - 点击和键盘移动和拖动以突出显示所有工作正常,但是一旦我进入绘图系统,只有点击可以。是什么导致了这个问题,有没有办法解决它?谢谢! (代码如下供参考)

# auto twitch animation for da rest of it

import pyautogui as pag
import keyboard

# failsafe pls dont mess up
while True:
    if keyboard.is_pressed("q"):
        break
    else:
        pag.sleep(3)
        # click gear 2355 50
        pag.leftClick(2355,50)
        pag.sleep(1)
        # clone frame 1131 1039
        pag.leftClick(1131,1039)
        pag.sleep(1)
        # click layer 2 twice 242 1387
        pag.leftClick(242,1387)
        pag.sleep(1)
        pag.leftClick(242,1387)
        pag.sleep(1)
        # highlight clouds - two right 582 109 - 2414 494 leftClick,dragTo left (x,y,t,button="left)
        pag.moveto(582,109)
        pag.sleep(1)
        pag.mouseDown(button="left")
        pag.moveto(2414,494,1)
        pag.mouseUp(button="left")
        pag.sleep(1)
        pag.press("right")
        pag.sleep(1)
        pag.press("right")
        pag.sleep(1)
        # highlight bottom cloud - two left 1013 973 - 111 803
        pag.moveto(1013,973)
        pag.sleep(1)
        pag.mouseDown(button="left")
        pag.moveto(111,803,1)
        pag.mouseUp(button="left")
        pag.sleep(1)
        pag.press("left")
        pag.sleep(1)
        pag.press("left")
        pag.sleep(1)
        # plane four left 1029 474 - 112 622
        pag.moveto(1029,474)
        pag.sleep(1)
        pag.mouseDown(button="left")
        pag.moveto(112,622,1)
        pag.mouseUp(button="left")
        pag.sleep(1)
        pag.press("left")
        pag.sleep(1)
        pag.press("left")
        pag.sleep(1)
        pag.press("left")
        pag.sleep(1)
        pag.press("left")
        pag.sleep(1)
        # plane four right 1450 656 - 2402 821
        pag.moveto(1450,656)
        pag.sleep(1)
        pag.mouseDown(button="left")
        pag.moveto(2402,821,1)
        pag.mouseUp(button="left")
        pag.sleep(1)
        pag.press("right")
        pag.sleep(1)
        pag.press("right")
        pag.sleep(1)
        pag.press("right")
        pag.sleep(1)
        pag.press("right")
        pag.sleep(1)

解决方法

使用 pydirectinput 库。如果其他人有这个问题 - 这是由于 pyautogui 模拟按键和鼠标按钮的旧系统。它使其不适用于某些游戏和程序,尤其是较新的游戏和程序。安装pydirectinput库,在代码中输入,将pyautogui前缀替换为pydirectinput。

import pyautogui
import pydirectinput

### instead of pyautogui.press("left") use
pydirectinput.press("left")