#python #python-3.x #automation
#python #python-3.x #автоматизация
Вопрос:
Я использую ОС Windows и пытаюсь выполнять щелчки по фоновым (неактивным) приложениям, не выводя их на передний план. Мне удалось выполнить in в Microsoft Paint (рисование точки на минимизированном экземпляре paint), но по какой-то причине это, похоже, не работает в приложении на основе Java (RuneLite.exe ), для которого я пишу эту программу.
Некоторая дополнительная информация:
- У Paint много дочерних окон, и выполнение щелчка, похоже, работает только тогда, когда я выполняю его в определенном дочернем окне (класс: Afx: 00007FF758890000: 8) это самое внутреннее окно.
- Структура окна RuneLite выглядит следующим образом:
- RuneLite (класс: SunAwtFrame)
- неизвестно (класс: SunAwtCanvas)
- неизвестно (класс SunAwtCanvas)
- неизвестно (класс: SunAwtCanvas)
- RuneLite (класс: SunAwtFrame)
- Я пытался использовать дескриптор всех 3-х вышеупомянутых окон, но, похоже, ни одно из них не работает
- Код способен находить дескриптор окна, и он корректен (проверено с помощью Spy )
- Окно мигает оранжевым цветом на панели задач после запуска кода, поэтому, должно быть, было запущено какое-то событие
- Я определил координаты, сделав скриншот окна и используя paint для поиска координат определенного местоположения. (Если есть лучший способ сделать это, пожалуйста, дайте мне знать)
from pywinauto.application import Application
amount = 2
handles = []
def start_apps():
for i in range(amount):
a = Application()
a.start("D:\Users\Arno\AppData\Local\RuneLite\RuneLite.exe")
time.sleep(15)
handle = a.window().child_window(class_name="SunAwtCanvas", found_index=1).handle # select the most inner window
handles.append(handle)
def do_click(h, x, y):
long_position = win32api.MAKELONG(x, y) # simulate the mouse pointer and send it to the specified coordinates
win32api.SendMessage(h, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position) # simulate mouse press
win32api.SendMessage(h, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position) # Simulate mouse up
start_apps()
print(handles)
time.sleep(20)
for h in handles:
do_click(h, 450, 290)
Кто-нибудь знает, почему это происходит и как я мог бы это исправить?