У меня есть позиция мыши на экране, например (10, 10), и я хочу перевести это положение на элемент управления. Как я могу это сделать?
Пример:
from pywinauto.application import Application
app = Application((backend="uia").start("notepad.exe")
dlg = app.top_window()
hardcoded_file_button_rec = dlg.File.rectangle() #<RECT L10, T10, R40, B40>
given_mouse_position = (10, 10)
found_file_button = search_by_position(app, given_mouse_position)
assert hardcoded_file_button_rec == found_file_button.rectangle()
У pywinauto уже есть встроенная функция для этого? По этому вопросу я нашел, как перебирать все элементы управления в окне, используя pywinauto. Поэтому, повторяя его, я могу проверить, есть ли controls[i].rectancle().top == 10 and controls[i].rectancle().left == 10
.
Что правильно делать?
Метод .from_point(x, y)
находится в разработке.
Обходной путь здесь: выпуск № 413.
Как и на StackOverflow: как передать POINT-структуру методу ElementFromPoint в Python?
Очистить образец кода для любого элемента:
from ctypes.wintypes import tagPOINT
import pywinauto
elem = pywinauto.uia_defines.IUIA().iuia.ElementFromPoint(tagPOINT(x, y))
element = pywinauto.uia_element_info.UIAElementInfo(elem)
wrapper = pywinauto.controls.uiawrapper.UIAWrapper(element)
wrapper
- это то, что вам нужно, вероятно, так как это объект действия, имеющий такие методы, как .invoke()
и т.д.