python 视频游戏机器人无法正确使用键盘

q5lcpyga  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(99)

我一直在尝试为英雄联盟制作一个机器人,使用Python3和pyautogui。我可以使用pywin32使机器人左键单击和右键单击,但是使用pyautogui的按键无法正常工作。pyautogui能够在点击文本框时输入,但无法使用其他能力。具体来说,level_up函数不起作用。以下是我的代码:

from pyautogui import *
import pyautogui
import time
import keyboard
import numpy as np
import random
import win32api, win32con

def click_right(x,y):#works fine
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN,0,0)
    time.sleep(.01)
    win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP,0,0)

def click_left(x,y):#works fine
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
    time.sleep(.1)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)

def type(word):
    for char in word:
        pyautogui.keyDown(char)
        time.sleep(.05)
        pyautogui.keyUp(char)

def buy_item(item):#item is a string, works fine
    click_left(1209,998)#open shop
    time.sleep(.2)
    click_left(313,281)#click to search for item
    time.sleep(.2)
    type(item)#type item name
    time.sleep(.1)
    click_right(318,354)#buy item
    time.sleep(.1)
    click_left(1170,217)#close shop

def buy_items(items):#items is a list of strings, works fine
    click_left(1209, 998)  # open shop
    time.sleep(.2)

    for item in items:
        click_left(313, 281)  # search item
        time.sleep(.2)
        type(item)
        time.sleep(.1)
        click_right(318, 354)
        time.sleep(.1)
    click_left(1170, 217)

#doesn't work
def level_up(ability):#ability is a char in 'qwer'
    with pyautogui.hold('ctrl'):
        pyautogui.press(['q'])

def main():
    time.sleep(3)
    buy_items(['dagger', 'zeal', 'cloth'])
    time.sleep(1)
    level_up('q')
    #

if __name__ == '__main__':
    main()

字符串
有没有一种方法可以正确地做到这一点?有没有一个比pyautogui更好的软件包可以使用?

xcitsw88

xcitsw881#

我从pyautogui切换到pydirectinput,它现在工作。

def level_up(ability):#ability is a char in 'qwer'
    pydirectinput.keyDown('ctrl')
    pydirectinput.keyDown(ability)
    time.sleep(.1)
    pydirectinput.keyUp('ctrl')
    pydirectinput.keyUp(ability)

字符串

相关问题