Что нового

UIAutomate - автоматизация нестандартных элементов GUI

Автор
I

InnI

AutoIT Гуру
Сообщения
4,564
Репутация
1,262
Принцип понятен.
Как вариант
Код:
#include <UIAutomate.au3>

$oPage = _UIA_GetElementFromHandle(ControlGetHandle("AutoIt — Википедия - Google Chrome", "", "Chrome_RenderWidgetHostHWND1"))
$aText = _UIA_FindAllElements($oPage, "ControlType", $UIA_TextControlTypeId)
$aFrom = _UIA_FindElementsInArray($aText, "Name", "Класс языка", False, True)
$aTo   = _UIA_FindElementsInArray($aText, "Name", "Повлиял на" , False, True)
For $i = $aFrom[1] + 1 To $aTo[1] - 1
  ConsoleWrite(_UIA_ElementGetPropertyValue($aText[$i], "Name") & @CRLF)
Next
 

breakin

Новичок
Сообщения
3
Репутация
0
Надо кликнуть по строке в панели ($UIA_EditControlTypeId), куда
программа выводит и периодически обновляет текстовые данные.
Эти данные мой скрипт может считать и принять за юзера решение,
по какой строке кликать.
Первое, что пришло на ум - по координатам мыши. Но известен только размер
панели, и то, что там есть скроллбар. То есть невозможно определить, сколько
строк помещается в панель, чтобы высчитать координаты клика по нужной строке.
Какие еще есть варианты? В смысле не еще, а вообще, потому что тут тупик.
 
Последнее редактирование:
Автор
I

InnI

AutoIT Гуру
Сообщения
4,564
Репутация
1,262
Элемент Edit не поддерживает шаблоны работы с текстом. Всё, что можно от него получить - это весь текст и положение скролла. Количество строк, положение каретки, наличие выделения Edit не возвращает. Без "костылей" не обойтись.
Если Edit поддерживает выделение (Shift + Down) и копирование (Ctrl + C), то можно построчно выделять текст, копировать в буфер обмена, сравнивать с искомой подстрокой, при совпадении искать цвет выделения текста и кликать в координаты цвета.
 

breakin

Новичок
Сообщения
3
Репутация
0
Жажда неизведанного погнала в другую сторону - _UIA_ElementMouseClick.
Задаю координаты для клика - кликает по 6 строке.
Опускаю окно (без ресайза) строго по игреку вниз - кликает по 17й.
Во-1х, почему не по 6й.
Во-2х, почему по строке ниже, а не выше.
Думал, координаты мыши абсолютные (относительно границ экрана), видно не так.
Скроллинга нет, специально вывел текста где-то на 80% высоты панели.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,564
Репутация
1,262
@breakin
Посмотрите координаты элемента через _UIA_ElementGetBoundingRectangle() до смещения окна и после. И сравните с Inspect. Возможно, после перемещения окна нужно обновить элемент (заново найти/создать).

Вот пример для блокнота. Работает корректно без обновления элемента - выделяет ту же строку.
Код:
#include <UIAutomate.au3>

Run("notepad.exe")
$hWnd = WinWaitActive("[class:Notepad]")
WinMove($hWnd, "", 50, 50, 400, 300)
$hEdit = ControlGetHandle($hWnd, "", "Edit1")
For $i = 1 To 9
  ControlSend($hWnd, "", $hEdit, $i & @CR)
Next

$X = 80
$Y = 60
$oEdit = _UIA_GetElementFromHandle($hEdit)
_UIA_ElementMouseClick($oEdit, "", $X, $Y, 2)
Sleep(1111)
ControlSend($hWnd, "", $hEdit, "^{home}")
Sleep(1111)
WinMove($hWnd, "", 50, 300)
_UIA_ElementMouseClick($oEdit, "", $X, $Y, 2)
 
Верх