-
Автор темы
- #1
Пишу бота для игры Tower of Fantasty.
Сейчас могу: получать изображение окна, изменять размер и положение окна, отправлять туда нажатие кнопок с клавиатуры.
Чтобы завершить core механики не хватает функции чтобы отправлять клики в окно.
Использую PyWin32, ctypes(user32.dll). Программа должна быть external (если это возможно). Игра для которой делаю бота использует Unreal Engine.
Нашел такой код чтобы кликать мышкой. PostMessageA возвращает 1 по документации это значит что сообщение отправлено успешно. Но видимого результата нет.
У этой проблемы есть решение но оно предполагает фокусировку на окне игры. То есть все совершенные пользователем команды будут отправляться в окно, чего мне не нужно
Моя программа запущена от имени администратора. Я пытался использовать ahk - безуспешно, autoit - безуспешно, pywinauto - не может подключиться к окну.
Подскажите что использовать чтобы бот смог кликать по координатам в окне игры при условии, что игра свернута, не активна, не в фокусе. Хочу external программу чтобы не было проблем с анти читом. Если есть решения на других ЯП с радостью рассмотрю. Если существует только Iternal реализация то хочу увидеть как пойти этим путем.
Если я пришел не на тот форум подскажите где найти инфу по моему вопросу, с stackoverflow меня выгнали тк читы <3
Сейчас могу: получать изображение окна, изменять размер и положение окна, отправлять туда нажатие кнопок с клавиатуры.
Чтобы завершить core механики не хватает функции чтобы отправлять клики в окно.
Использую PyWin32, ctypes(user32.dll). Программа должна быть external (если это возможно). Игра для которой делаю бота использует Unreal Engine.
Нажатие клавиш клавиатуры:
from ctypes import windll
import win32con
hwnd = win32gui.FindWindow(None, "Example Window Name")
windll.user32.PostMessageA(hwnd, win32con.WM_KEYDOWN, win32con.VK_SPACE, 0)
Нажатие мыши:
from ctypes import windll
import win32con
hwnd = win32gui.FindWindow(None, "Example Window Name")
x,y = (0,0) # doesn't matter
windll.user32.PostMessageA(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, win32api.MAKELONG(x, y)) #return 1
time.sleep(0.001) #try any timings
windll.user32.PostMessageA(hwnd, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, win32api.MAKELONG(x, y)) #return 1
Нажатие мышки с фокусировкой:
from ctypes import windll
import win32con
import win32process
import win32gui
import win32api
hwnd = win32gui.FindWindow(None, "Example Window Name")
x,y = (0,0) # doesn't matter
remote_thread, _ = win32process.GetWindowThreadProcessId(hwnd)
win32process.AttachThreadInput(win32api.GetCurrentThreadId(), remote_thread, True)
win32gui.SetFocus(hwnd)
windll.user32.PostMessageA(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, win32api.MAKELONG(x, y))
time.sleep(0.001)
windll.user32.PostMessageA(hwnd, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, win32api.MAKELONG(x, y))
Подскажите что использовать чтобы бот смог кликать по координатам в окне игры при условии, что игра свернута, не активна, не в фокусе. Хочу external программу чтобы не было проблем с анти читом. Если есть решения на других ЯП с радостью рассмотрю. Если существует только Iternal реализация то хочу увидеть как пойти этим путем.
Если я пришел не на тот форум подскажите где найти инфу по моему вопросу, с stackoverflow меня выгнали тк читы <3
Последнее редактирование: