Как отправить DirectInput в pywinauto?
Я хочу сделать программу, что может отправлять симулированные нажатия в минимизированное!!! окно, оно должно работать в свернутом режиме!!!.
Для примера запустил Minecraft 1.12.2, взял за основу код отсюда: https://github.com/learncodebygaming/multiple-minimized-windows/blob/main/main.py, но ничего кроме букв в чат не смог добиться. Для них, как я понял, непринципиально, используешь ты директ или обычный инпут.

Но вот для совершения действий, таких как прыжок, нужен именно директ инпут. Нигде не нашел, как отправить его в приложение.
from time import sleep
import win32gui, win32ui, win32con, win32api
def main():
window_name = "Minecraft 1.12.2"
hwnd = win32gui.FindWindow(None, window_name)
win = win32ui.CreateWindowFromHandle(hwnd)
win.SendMessage(win32con.WM_CHAR, ord('B'), 0)
def list_window_names():
def winEnumHandler(hwnd, ctx):
if win32gui.IsWindowVisible(hwnd):
print(hex(hwnd), '"' + win32gui.GetWindowText(hwnd) + '"')
win32gui.EnumWindows(winEnumHandler, None)
def get_inner_windows(whndl):
def callback(hwnd, hwnds):
if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):
hwnds[win32gui.GetClassName(hwnd)] = hwnd
return True
hwnds = {}
win32gui.EnumChildWindows(whndl, callback, hwnds)
return hwnds
sleep(2)
main()
Ответы (2 шт):
Немного покопавшись в интернете, я все-таки нашел решение проблемы - метод win32gui.PostMessage()
def main(name="Minecraft 1.12.2"):
window_name = name
hwnd = win32gui.FindWindow(None, window_name)
while True:
win32gui.PostMessage(hwnd,win32con.WM_RBUTTONDOWN,win32con.MK_RBUTTON,0)
time.sleep(0.5)
Сообщения корректно отправляются в окно с майнкрафтом, удочка в воду закидывается, бот для авто-рыбалки готов.
Для уверенности протестировал в Crossout, код не подвел.
Если вкратце, то код на pywinauto должен выглядеть примерно так:
from pywinauto import Desktop
Desktop(backend="win32").window(title="Minecraft 1.12.2").click(button="left", coords=(x, y))
По умолчанию используется параметр absolute=False, то есть координаты считаются от левого верхнего угла окна (а не экрана). В некоторых приложениях с пересчётом координат могут быть проблемы (знаю всего один такой случай), но в авто тестах это точно работает на тестовых приложениях.