#python #ui-automation #pywinauto
Вопрос:
У меня есть следующий код:
from pywinauto import Desktop
from pyautogui import position
while True:
desktop = Desktop(backend="uia")
control = desktop.from_point(*position())
control.draw_outline()
Таким образом, в каждом цикле кода pywinauto рисует зеленый прямоугольник на элементе управления текущей позицией мыши. Подобный этому:
Но исключительно в приложении CMD from_point
функция не находит строку состояния и полосу прокрутки. Он находит только текстовую область.
Я думаю, что это что-то связанное с приложением CMD, вероятно, оно рисует свой элемент управления текстовой областью перед всеми остальными элементами управления. Поэтому я хочу знать, возможно ли преодолеть эту ситуацию , используя функции top_from_point
и/или parent
, возможно. Стоит отметить, что я не нашел ни одного другого приложения с таким же поведением, но, возможно, у какого-то другого приложения также есть эта проблема.
Ответ №1:
- Это поведение может быть воспроизведено с помощью ‘Inspect.exe’: Если вы наведете курсор мыши на CMD Windows, он найдет только элемент управления «Текстовая область». Чтобы найти другие элементы управления, вы должны щелкнуть по дереву в графическом интерфейсе проверки.
- С Pywinauto то же самое: если вы наведете курсор мыши на командную строку Windows, она найдет только элемент управления «Текстовая область». Чтобы найти другие элементы управления, необходимо выполнить следующий код: print(control.top_level_parent().потомки())
Реализация from_point находится в uia_element_info.py:
@classmethod
def from_point(cls, x, y):
return cls(IUIA().iuia.ElementFromPoint(tagPOINT(x, y)))
Он использует функцию API автоматизации пользовательского интерфейса MS от UIAutomationCore.dll
Поэтому я предполагаю, что это может быть проблема iuia.Элемент из точки.
Комментарии:
1. Я также пробовал использовать другие инструменты автоматизации, но произошло то же самое поведение. Спасибо, Дэвид.