Что нового

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

joker85

Новичок
Сообщения
9
Репутация
0
Да, ошибки. Первая: ошибка создания объекта массива. Обычно такое случается при большом количестве элементов. Попробуйте сначала найти панель, в которой находится этот Edit. Потом используйте эту панель в качестве родителя для поиска Edit.
Вы про это говорите?
Код:
[I][B]ControlType:    UIA_EditControlTypeId (0xC354)[/B][/I]
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,983
Репутация
1,461
Это тип элемента "Фамилия" значение которого нужно получить.
 

joker85

Новичок
Сообщения
9
Репутация
0
Это тип элемента "Фамилия" значение которого нужно получить.
нету панелей

Вот что выдает сам AutoIt Window Info (x64)

Код:
>>>> Window <<<<
Title:    Менеджер приложений | Microsoft SQL Server | Administrator A.A. (snadmin)
Class:    WindowsForms10.Window.8.app.0.1569a64_r6_ad1
Position:    -8, -8
Size:    1936, 1056
Style:    0x17CF0000
ExStyle:    0x00050100
Handle:    0x00000000004C0720

>>>> Control <<<<
Class:    WindowsForms10.Window.8.app.0.1569a64_r6_ad1
Instance:    35
ClassnameNN:    WindowsForms10.Window.8.app.0.1569a64_r6_ad135
Name:    
Advanced (Class):    [CLASS:WindowsForms10.Window.8.app.0.1569a64_r6_ad1; INSTANCE:35]
ID:    1120166
Text:    PropertyGridView
Position:    103, 642
Size:    1434, 344
ControlClick Coords:    310, 74
Style:    0x56010000
ExStyle:    0x00000000
Handle:    0x00000000001117A6

>>>> Mouse <<<<
Position:    413, 739
Cursor ID:    0
Color:    0xFFFFB6

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
Приложения
Пропуска сотрудников
Пропуска сотрудников
Все поля
PropertyGrid
PropertyGridView
toolStrip


>>>> Hidden Text <<<<
АБРЄЄВА
Все поля
PropertyGrid
PropertyGridView
Capture
toolStrip
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,983
Репутация
1,461
Панели нужно искать в дереве Inspect.

выдает сам AutoIt Window Info (x64)
Если у контрола не меняются Class и Instance, то попробуйте так
Код:
#include <UIAutomate.au3>

$hWnd = ControlGetHandle("Менеджер приложений", "", "WindowsForms10.Window.8.app.0.1569a64_r6_ad135")
$oParent = _UIA_GetElementFromHandle($hWnd)
$oElem = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Фамилия", "LegacyIAccessible.Name")
$sVal1 = _UIA_ElementGetPropertyValue($oElem, "Value.Value")
ConsoleWrite($sVal1 & @CRLF)
$sVal2 = _UIA_ElementGetPropertyValue($oElem, "LegacyIAccessible.Value")
ConsoleWrite($sVal2 & @CRLF)
 

joker85

Новичок
Сообщения
9
Репутация
0
// Всё равно выдаёт 0, честно, я да же не понимаю как к Панеля обращаться. Смотрите скрин. Панель "Фамилия"?
 

Вложения

  • 0000000000000000.png
    0000000000000000.png
    284.1 КБ · Просмотры: 11
Автор
I

InnI

AutoIT Гуру
Сообщения
4,983
Репутация
1,461
Есть элемент "Окно свойств" таблицу, который является родителем для множества других элементов какого-то типа. Среди этих других элементов есть "Фамилия". В то же время, в списке присутствует элемент "Фамилия" поле, но отсутствуют другие идентичные ("Имя" поле, "Отчество" поле и т.д.). Можно сделать вывод, что элементы "..." поле создаются либо при клике по ним, либо при наведении курсора мыши во время поиска утилитой. Следовательно, прямым поиском по дереву эти "поля" найти не получится.

Попробуйте следующее. Запустите Inspect и раскрывайте дерево главного окна, кликая по "плюсикам", чтобы получился "прямой путь" до элемента "Окно свойств" таблицу. Теперь раскройте этот элемент. Будет ли в перечне элемент "Фамилия" поле? Скорее всего - нет. Теперь раскройте элемент "Фамилия". Будет ли он содержать дочерние? Скорее всего - нет.
 

joker85

Новичок
Сообщения
9
Репутация
0
Есть элемент "Окно свойств" таблицу, который является родителем для множества других элементов какого-то типа. Среди этих других элементов есть "Фамилия". В то же время, в списке присутствует элемент "Фамилия" поле, но отсутствуют другие идентичные ("Имя" поле, "Отчество" поле и т.д.). Можно сделать вывод, что элементы "..." поле создаются либо при клике по ним, либо при наведении курсора мыши во время поиска утилитой. Следовательно, прямым поиском по дереву эти "поля" найти не получится.

Попробуйте следующее. Запустите Inspect и раскрывайте дерево главного окна, кликая по "плюсикам", чтобы получился "прямой путь" до элемента "Окно свойств" таблицу. Теперь раскройте этот элемент. Будет ли в перечне элемент "Фамилия" поле? Скорее всего - нет. Теперь раскройте элемент "Фамилия". Будет ли он содержать дочерние? Скорее всего - нет.
Вы правы
поле создаются либо при клике по ним, либо при наведении курсора мыши во время поиска утилитой
 

SharkyEXE

Новичок
Сообщения
136
Репутация
0
Всем здравствуйте.

Пожалуйста, очень нужно, возможно или нет, в этом ненормальном окне, для нормальных окон просто кнопки "Button1", "Button2", нажать один раз на ненормальную кнопку "Остаться в бесплатной версии"

Спасибо.
 

Вложения

  • Захват3.jpg
    Захват3.jpg
    348.2 КБ · Просмотры: 7

joiner

Модератор
Локальный модератор
Сообщения
3,573
Репутация
634
клик по координатам
 

SharkyEXE

Новичок
Сообщения
136
Репутация
0
клик по координатам
Здравствуйте

Попытался воспользоваться таким

Код:
#include <UIAutomate.au3>
$oParent = _UIA_GetElementFromHandle(WinGetHandle("AdGuard VPN (release)"))
voElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Остаться в бесплатной версии", "LegacyIAccessible.Name")
_UIA_ElementDoDefaultAction($oElement)


Но при запуске - кнопка "Остаться в бесплатной версии" нажимается, все вроде как получилось

Но так и не могу понять - а возможно или нет сделать условие, я хочу завернуть в While 1-WEnd

Если есть кнопка
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Остаться в бесплатной версии", "LegacyIAccessible.Name")
то выполнить действие
_UIA_ElementDoDefaultAction($oElement)
Иначе
Пауза 1000

Так пробовал, не работает

Код:
#include <UIAutomate.au3>
While 1
$oParent = _UIA_GetElementFromHandle(WinGetHandle("AdGuard VPN (release)"))
If $oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Остаться в бесплатной версии", "LegacyIAccessible.Name") Then
_UIA_ElementDoDefaultAction($oElement)
Exit
Else
Sleep (1000)
EndIf
WEnd

Сообщение автоматически объединено:

Пожалуйста, если возможно, помогите переделать это для кнопки


У меня НЕ срабатывает

Код:
$Text = "Остаться в бесплатной версии"
# $oElement = _UIA_GetControlTypeElement($oParent, "UIA_TextControlTypeId", $Text, "Name", True)
If IsObj($oElement) Then ConsoleWrite("Текст найден" & @CRLF)
 
Последнее редактирование:
Автор
I

InnI

AutoIT Гуру
Сообщения
4,983
Репутация
1,461

joker8448

Новичок
Сообщения
1
Репутация
0
Мужики подскажите куда капнуть.
А то 2 дня голову ломаю.
Задача такова.
Запустить ПО. Если в активном окне пишет "Ошибка подключения" - проверить.
Нажать по этому полю "Ошибка подключения" и выдает выпадающий список 2 поля, айпишник (127.0.0.1) и порт (5001), сменить айпишник и нажать на обновить (зеленую кнопочку). Если нет поля "Ошибка подключения", а пишет айпишник и порт и доступны поля логин и пароль.
Вот не могу сделать проверку на сравнение.

Вот что выдает ПО Инспект

Код:
How found:    Mouse move (909,635)
    hwnd=0x000A0A02 64bit class="WindowsForms10.BUTTON.app.0.1569a64_r6_ad1" style=0x5601000B ex=0x0
Name:    "Ошибка подключения"
ControlType:    UIA_ButtonControlTypeId (0xC350)
LocalizedControlType:    "кнопка"
BoundingRectangle:    {l:835 t:625 r:1057 b:648}
IsEnabled:    true
IsOffscreen:    false
IsKeyboardFocusable:    true
HasKeyboardFocus:    true
AccessKey:    ""
ProcessId:    11760
RuntimeId:    [2A.A0A02]
AutomationId:    "_btnAppSrvAddress"
FrameworkId:    "WinForm"
ClassName:    "WindowsForms10.BUTTON.app.0.1569a64_r6_ad1"
NativeWindowHandle:    0xA0A02
ProviderDescription:    "[pid:9872,providerId:0xA0A02 Main:Nested [pid:11760,providerId:0xA0A02 Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]; Hwnd(parent link):Microsoft: HWND Proxy (unmanaged:uiautomationcore.dll)]"
IsPassword:    false
HelpText:    ""
LegacyIAccessible.ChildId:    0
LegacyIAccessible.DefaultAction:    "Нажать"
LegacyIAccessible.Description:    ""
LegacyIAccessible.Help:    ""
LegacyIAccessible.KeyboardShortcut:    ""
LegacyIAccessible.Name:    "Ошибка подключения"

Я сделал так
Код:
$oElement0 = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Ошибка подключения","LegacyIAccessible.Name")
$oElement1 = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "192.168.0.10:5001","LegacyIAccessible.Name")
If $oElement0 <> $oElement1 Then

Но это не правильно
 

Вложения

  • 00000000.png
    00000000.png
    8.6 КБ · Просмотры: 3
  • 00000001111111.png
    00000001111111.png
    10.4 КБ · Просмотры: 3
  • 000222222.png
    000222222.png
    9.9 КБ · Просмотры: 3
  • 0000000003333333.png
    0000000003333333.png
    9.2 КБ · Просмотры: 3
Последнее редактирование:
Верх