Что нового

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

Автор
I

InnI

AutoIT Гуру
Сообщения
4 300
Репутация
1 155
файл UIAConstants.au3 содержит все доступные действия с элементами?
Нет, не все. Файл содержит определения констант и описания интерфейсов до Win10 1703 Creators Update включительно.
Но у меня пока не было необходимости использовать даже появившиеся в Win8 интерфейсы. Не говоря уже о дальнейшем их развитии.
 

Dragonling

Новичок
Сообщения
3
Репутация
0
Здравствуйте. Есть такой код:
Код:
#include "UIAutomate.au3"

Opt ("MustDeclareVars", 1)

global const $gsWinNameRemoteConsole = "Консоль управления ЦР"

Func main()
    local $hwnd = WinGetHandle($gsWinNameRemoteConsole)
    local $oWindow = _UIA_GetElementFromHandle($hWnd)
    if @error then Exit
    local $oRibbon = _UIA_GetControlTypeElement($oWindow, $UIA_PaneControlTypeId, "The Ribbon")
    if @error then
        MsgBox (0, @ScriptLineNumber, @error)    ; @error = 4
        Exit
    EndIf
    msgbox (0, "", "OK!")
EndFunc

main()

Если запустить скрипт и "Консоль управления ЦР" под одним и тем же непривилегированным пользователем, то выдаётся ошибка 4, а в консоли текст:
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
!> _UIA_GetControlTypeElement : ошибка создания массива элементов (объектов)

Если запустить скрипт из scite под админом, то выдаётся ошибка 6, а в консоли текст:
!> _UIA_GetControlTypeElement : значение указанного свойства найденных элементов не соответствует заданному

Операционка Win7Corp х32. Autoit 3.3.12.0 (более высокие версии глючат с COM-объектами, а они мне нужны).

Информация об элементе из inspect.exe
How found: Selected from tree...
RuntimeId: "[42.131708]"
BoundingRectangle: {l:0 t:-4 r:1280 b:148}
ProcessId: 2304
ControlType: UIA_PaneControlTypeId (0xC371)
LocalizedControlType: "панель"
Name: "The Ribbon"
AccessKey: ""
HasKeyboardFocus: false
IsKeyboardFocusable: false
IsEnabled: true
AutomationId: "ribbon"
ClassName: "WindowsForms10.Window.8.app.0.2d4d161_r12_ad1"
HelpText: ""
IsPassword: false
NativeWindowHandle: 0x2027C
IsOffscreen: false
FrameworkId: "WinForm"
ProviderDescription: "[pid:4736,hwnd:0x2027C Main:Nested [pid:2304,hwnd:0x2027C Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]; Hwnd(parent link):Microsoft: HWND Proxy (unmanaged:uiautomationcore.dll)]"
LegacyIAccessible.ChildId: 0
LegacyIAccessible.DefaultAction: ""
LegacyIAccessible.Description: ""
LegacyIAccessible.Help: ""
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "The Ribbon"
LegacyIAccessible.Role: страница свойств (0x26)
LegacyIAccessible.State: обычный (0x0)
LegacyIAccessible.Value: "The Ribbon"
IsDockPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollPatternAvailable: false
IsScrollItemPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsTablePatternAvailable: false
IsTableItemPatternAvailable: false
IsTextPatternAvailable: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsValuePatternAvailable: false
IsWindowPatternAvailable: false
IsItemContainerPatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsSynchronizedInputPatternAvailable: false
FirstChild: "" кнопка
LastChild: "Lower Ribbon" панель
Next: [null]
Previous: "Status Bar" панель
Other Props: Object has no additional properties
Children: "" кнопка
"Quick Access Toolbar" панель инструментов
"Ribbon Tabs" вкладка
"Lower Ribbon" панель
Ancestors: "Консоль управления ЦР" окно
"Рабочий стол" панель
[ No Parent ]
Самое забавное, что позавчера код не работал, вчера внезапно заработал, сегодня снова не работает. При попытке искать в дереве элементов более глубоко вложенные объекты, типа кнопок, тоже валятся ошибки (но, кажется, другие, типа "неправильное условие поиска"; не вникал)

Подскажите, пожалуйста, куда копать?
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 300
Репутация
1 155
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
Метод FindAll завершился с ошибкой. Почему - не знаю. Но по опыту скажу: либо нет доступа (недостаточно прав), либо превышено количество элементов дерева. Максимальное количество может быть как 32000, так и 5000 (зависит от программы).
!> _UIA_GetControlTypeElement : значение указанного свойства найденных элементов не соответствует заданному
Здесь всё понятно. Панели найдены, но среди них нет ни одной с именем "The Ribbon". Такое бывает, когда inspect не отображает элемент в дереве (но у вас, я вижу, отображает), или когда дерево "устарело" (окно обновилось, вкладка переключилась и т.д.). Также убедитесь, что WinGetHandle() нашла именно то окно, которое нужно (т.к. она может и скрытые окна найти).
Пробуйте искать последовательно от родителя к потомку через _UIA_GetElementFromCondition() с ограничением $TreeScope_Children. Также можно попробовать _UIA_FindAllElementsEx() со сложным условием.
 

Dragonling

Новичок
Сообщения
3
Репутация
0
Спасибо за столь быстрый ответ. Действительно, дело оказалось в количестве элементов дерева (в окне программы грид с ~10k строк; когда он ещё не был прогружен - тогда программа и работала в исходном виде). Подскажите, где вы проходили курсы телепатии? =)
И да, отдельное спасибище за библиотеку!
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 300
Репутация
1 155
Подскажите, где вы проходили курсы телепатии?
Тут недалеко
 

betauto

Новичок
Сообщения
15
Репутация
0
Описание:
Набор функций, расширяющий возможности AutoIt по работе с нестандартными элементами GUI. При помощи данных функций возможна автоматизация элементов таких классов, как DirectUIHWND, NetUIHWND, UIRibbonWorkPane, автоматизация таких программ, как Google Chrome, Mozilla Firefox, автоматизация элементов графических интерфейсов, написанных на Delphi, .NET (WPF), QT и т.д.
Как мне испольщовать ее в c#, в dll Autoit,подключаемой в проект, нет же этой библиотеки ?
 
Верх