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

问题描述 投票:0回答:1

我一直在尝试使用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 更好的包吗?

python pywin32 pyautogui
1个回答
0
投票

我从

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)
© www.soinside.com 2019 - 2024. All rights reserved.