[Элементы GUI] Re: UIAutomate - автоматизация нестандартных элементов GUI
Спасибо автору за работу, очень помогли данные функции в моем хобби.
Субъективно сужу только по своей задаче, но с поиском и массивами получилось сложновато.
Гораздо проще, если бы поиск возвращал индекс объекта в массиве. Предусмотреть в параметрах начальный индекс поиска. В общем, как реализован поиск в строках.
Для примера покажу свое дерево, в котором объекты не всегда на своем месте.
Ближайший точный ориентир для нужного объекта - надпись "НАПАСТЬ", который бывает и кнопкой и текстом.
В данном случае мне нужен текст "19" (выделен на скринах). Попробовал новой функцией, не получилось, разбираться не стал, потому что в процессе написания уже не понравилось.
$aFinds = _UIA_FindElementsInArray($aAllElements, $UIA_NamePropertyId, "НАПАСТЬ")
If IsArray($aFinds) And $aFinds[0] > 0 Then
Local $aFindText = _UIA_FindAllElementsEx($aFinds[$aFinds[0]])
If IsArray($aFindText) And $aFindText[0] > 0 Then
_DebugOut(_UIA_ElementGetPropertyValue($aFindText[1], $UIA_NamePropertyId))
EndIf
EndIf
Вот так делал раньше, работает.
For $i = 1 To $aAllElements[0]
If _UIA_ElementGetPropertyValue($aAllElements[$i], $UIA_NamePropertyId) = "НАПАСТЬ" Then
For $j = $i+1 To $aAllElements[0]
If _UIA_ElementGetPropertyValue($aAllElements[$j], $UIA_ControlTypePropertyId) = 0xC364 And _
_UIA_ElementGetPropertyValue($aAllElements[$j], $UIA_NamePropertyId) <> "НАПАСТЬ" Then
_DebugOut(_UIA_ElementGetPropertyValue($aAllElements[$j], $UIA_NamePropertyId))
ExitLoop 2
EndIf
Next
EndIf
Next
В данном случае возврат в поиске только индекса избавил бы нас от лишних циклов и условий, освобождение стека от передачи и возвратов массивов.