Python Mouse Click для игры (прямой ввод) - PullRequest
0 голосов
/ 02 марта 2019

Я много искал симуляцию щелчков мышью и движения для игр DirectX.Я нашел хорошие источники о нажатии клавиш, но ничего для мыши.На самом деле есть хорошая тема про переполнение стека при нажатии клавиш с прямым вводом ( Имитация нажатий клавиш Python для управления игрой ).Но у меня нет достаточного опыта, чтобы заставить его работать за щелчки мыши в определенном месте.

Я пробовал много модулей Python, таких как pyautogui, win32 и т. Д., Они не работают.Даже я пытался щелкнуть его по autohotkey с отправкой аргументов в файл .ahk, но это не стабильно и не очень хороший способ.Я буду благодарен за каждый комментарий.Я работаю над этим кликом в течение 2 дней, и я полностью потерян.Спасибо!


Я нашел этот код от Reddit для кликов в игре, но он тоже не работает.

import ctypes

PUL = ctypes.POINTER(ctypes.c_ulong)

class KeyBdInput(ctypes.Structure):
    _fields_ = [("wVk", ctypes.c_ushort),
                ("wScan", ctypes.c_ushort),
                ("dwFlags", ctypes.c_ulong),
                ("time", ctypes.c_ulong),
                ("dwExtraInfo", PUL)]


class HardwareInput(ctypes.Structure):
    _fields_ = [("uMsg", ctypes.c_ulong),
                ("wParamL", ctypes.c_short),
                ("wParamH", ctypes.c_ushort)]


class MouseInput(ctypes.Structure):
    _fields_ = [("dx", ctypes.c_long),
                ("dy", ctypes.c_long),
                ("mouseData", ctypes.c_ulong),
                ("dwFlags", ctypes.c_ulong),
                ("time", ctypes.c_ulong),
                ("dwExtraInfo", PUL)]


class Input_I(ctypes.Union):
    _fields_ = [("ki", KeyBdInput),
                ("mi", MouseInput),
                ("hi", HardwareInput)]

class Input(ctypes.Structure):
    _fields_ = [("type", ctypes.c_ulong),
                ("ii", Input_I)]

def set_pos(x, y):
    x = 1 + int(x * 65536./1920.)
    y = 1 + int(y * 65536./1080.)
    extra = ctypes.c_ulong(0)
    ii_ = Input_I()
    ii_.mi = MouseInput(x, y, 0, (0x0001 | 0x8000), 0, ctypes.pointer(extra))
    command = Input(ctypes.c_ulong(0), ii_)
    ctypes.windll.user32.SendInput(1, ctypes.pointer(command), ctypes.sizeof(command))

def left_click():
    extra = ctypes.c_ulong(0)
    ii_ = Input_I()
    ii_.mi = MouseInput(0, 0, 0, 0x0002, 0, ctypes.pointer(extra))
    x = Input(ctypes.c_ulong(0), ii_)
    ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))

    extra = ctypes.c_ulong(0)
    ii_ = Input_I()
    ii_.mi = MouseInput(0, 0, 0, 0x0004, 0, ctypes.pointer(extra))
    x = Input(ctypes.c_ulong(0), ii_)
    ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))

Функция left_click () работает, но щелчок работает со всеми модулями, что янужно, чтобы set_pos () работал, но, к сожалению, это не так.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Я провел много исследований и нашел модуль pyautoit.Это действительно здорово и просто в использовании.Я думаю, что это работает только с 32-битным Python, я не мог установить его на 64-битную версию.Вы должны установить autoitx3 тоже, но я не уверен, может быть, он может работать только с одной DLL.После установки autoitx3 и модуля pyautoit вы можете использовать этот пример кода:

import autoit
import time

time.sleep(2)
#"left" stand for left click, 1243 and 1035 is x and y coordinates and 1 is number of clicks.
autoit.mouse_click("left", 1243, 1035, 1)
0 голосов
/ 02 марта 2019

Для игр Directx вы должны самостоятельно проверить его, если прямой ввод работает.

Но с пакетом pywinauto вы можете имитировать щелчки мыши и движения мыши.

Посмотрите на pywinauto.mouse

Для установки пакета pywinauto для python 27 вы можете использовать этот bat-файл.

install-Pywinauto.bat

C:\Python27\scripts\pip.exe install pywinauto
pause

Теперь вы готовы.

Left-mouse-click.py

import pywinauto
pywinauto.mouse.click(button='left', coords=(0, 0)) 

Double-Left-Mouse-Click.py

import pywinauto
pywinauto.mouse.double_click(button='left', coords=(0, 0))

, и если вы используете его вместе с AutoPytonLauncher

, вы можете щелкнуть изображение 3D-кнопки на рабочем столе, чтобы отправить любые сочетания клавиш Macro's или MouseClicks или MouseMovements для приложений или игр Windows. (без потери фокуса активных окон.)

...