Я знаю два метода, позволяющих получить имена свойств и шаблонов по кодуне делая таблицу соответствий
#include <UIAutomate.au3>
Global $str, $obj = _UIA_ObjectCreate()
; имя свойства
$obj.GetPropertyProgrammaticName(30020, $str)
ConsoleWrite($str & @CRLF)
; имя шаблона
$obj.GetPatternProgrammaticName(10018, $str)
ConsoleWrite($str & @CRLF)
Или невнимательно читаете.Или я чего то не понимаю
Обратитесь в Microsoft. Если узнаете как - сообщите.Не может быть что этим нельзя воспользоваться
Как бы воспользоваться готовым файлом (списком), который уже в инклюде, для отображения типа по имени.
$Code = 50000
$Name = StringRegExp(FileRead("UIAConstants.au3"), "\$UIA_(.*)ControlTypeId = " & $Code, 1)
$_ = IsArray($Name) ? ConsoleWrite($Name[0] & @CRLF) : ConsoleWrite("Undefined" & @CRLF)
полное имя, включая знак $, в переменную
$Code = 50000
$Name = StringRegExp(FileRead("UIAConstants.au3"), "(\$.*) = " & $Code, 1)
$Name = IsArray($Name) ? $Name[0] : ""
Это называется "Тернарный условный оператор". УсловиеНе могли бы Вы объяснить последнюю строчку? Как понимать здесь знак вопроса?
$Name = IsArray($Name) ? $Name[0] : ""
If IsArray($Name) Then
$Name = $Name[0]
Else
$Name = ""
EndIf
#include <UIAutomate.au3>
Opt("MustDeclareVars", 1)
Opt("WinTitleMatchMode", 2)
Global $hWnd, $sHandle, $oParent, $aText, $oElement, $aPos, $ElName, $aCustomText, $NameType
$hWnd = WinWait("Ensemble", "")
$sHandle = WinGetHandle($hWnd)
$oParent = _UIA_GetElementFromHandle($sHandle)
Sleep(2000)
$aPos = MouseGetPos()
$oElement = _UIA_GetElementFromPoint($aPos[0], $aPos[1])
$ElName = _UIA_ElementGetPropertyValue($oElement, "Name")
If $ElName <> "" Then
$NameType = "Name"
ConsoleWrite($ElName & " Type: " & $NameType & @CRLF)
EndIf
$aCustomText = _UIA_FindAllElements($oParent, "Name", "Animation")
ConsoleWrite($aCustomText[0]& @CRLF)
Я не слышал об официальной поддержке интерфейса UIAutomation на стороне JavaFX. Удивительно, что у вас вообще что-то работает.примеры на JavaFX
Совершенно верно. Но Inspect "видит" элементы по разному. Когда вы выбираете элемент мышью, то вызывается метод ElementFromPoint, в ответ на который программа непосредственно создаёт объект-элемент. При вызове метода FindAll программа должна вернуть указатель на массив элементов-объектов, подходящих под условие, переданное параметром метода. А если происходит работа с деревом, то, в ответ на метод RawViewWalker, программа должна вернуть указатель на промежуточный объект-дерево. И всё вот это должен сделать программист, пишущий программу, путём реализации интерфейса сервера UIAutomation. А эта UDF всего лишь клиент UIAutomation. Поэтому, если программист в своей программе реализовал интерфейс не полностью, то в UDF будут работать, как вы правильно заметили, только некоторые функции.если Inspect видит элементы, то с такой программой можно работать с помощью данной UDF
Это значит "найти всё, что предусмотрел разработчик"FindAll - не значит найти всё
Можно. Причём, только их и можно выполнять. В этом меню находятся только возможные для конкретного элемента действия.Можно ли выполнять действия, доступные в Inspect-> Action ?
Потому что их достаточно в 99% случаях и другие "действия", кроме ScrollIntoView, я просто не реализовывал.кроме MouseClick и DoDefaultAction других действий я не нахожу
интересует контролируемая вертикальная прокрутка по размеру листа, т.е. не MouseWheel, а Scroll.Scroll-> LargeIncrement или LargeDecrement
; Константы $ScrollAmount_* определены в UIAConstants.au3
$HorizontalAmount = $ScrollAmount_NoAmount
$VerticalAmount = $ScrollAmount_LargeIncrement
Local $pScroll, $oScroll
$oElement.GetCurrentPattern($UIA_ScrollPatternId, $pScroll)
$oScroll = ObjCreateInterface($pScroll, $sIID_IUIAutomationScrollPattern, $dtagIUIAutomationScrollPattern)
$oScroll.Scroll($HorizontalAmount, $VerticalAmount)