Автор Тема: UIAutomate - автоматизация нестандартных элементов GUI  (Прочитано 78848 раз)

binoom и 1 Гость просматривают эту тему.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3672

  • Автор темы
  • Репутация: 975
    • Награды
  • Версия AutoIt: 3.3.14.0
Radik  [?]
Цитировать
чтобы по ним пройтись
Что значит "пройтись"? Какую цель вы преследуете? Если вам нужно отделить "детей" от "внуков", то можно сначала найти только "детей"
Код: AutoIt [Выделить]
$aChild = _UIA_FindAllElementsEx($oParent, Default, $TreeScope_Children)

а затем для каждого "ребёнка" найти "внуков". Или можно общий одномерный массив разделить на (количество столбцов + 1) и получите псевдотаблицу, где в начале каждой "строки" будет "ребёнок", а за ним "внуки".

Русское сообщество AutoIt

Re: UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #255 Отправлен: Ноябрь 10, 2017, 18:46:06 »

Оффлайн Radik [?]

  • Новичок
  • *
  • Сообщений: 68
  • Репутация: 1
    • Награды
Пройтись, значит получить имя или свойство (в зависимости от задачи).
Спасибо, буду разбираться дальше.

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1373
  • Репутация: 171
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Sabat0n
А может лучше как-нибудь через API сделать?
А еще лучше зайти в настройки оповещений и в разделе "Оповещения по электронной почте", выставив параметр "Частота оповещений" в "Всегда оповещать" и чуть ниже отметить нужные события?

Оффлайн Radik [?]

  • Новичок
  • *
  • Сообщений: 68
  • Репутация: 1
    • Награды
Radik  [?]
Цитировать
чтобы по ним пройтись
Что значит "пройтись"? Какую цель вы преследуете? Если вам нужно отделить "детей" от "внуков", то можно сначала найти только "детей"
Код: AutoIt [Выделить]
$aChild = _UIA_FindAllElementsEx($oParent, Default, $TreeScope_Children)

а затем для каждого "ребёнка" найти "внуков". Или можно общий одномерный массив разделить на (количество столбцов + 1) и получите псевдотаблицу, где в начале каждой "строки" будет "ребёнок", а за ним "внуки".
Где-то можно посмотреть назначение констант?
Ладно вы мне подсказали про $TreeScope_Children, а их там - 1200 строк.

Русское сообщество AutoIt

Re: UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #258 Отправлен: Ноябрь 13, 2017, 17:20:01 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3672

  • Автор темы
  • Репутация: 975
    • Награды
  • Версия AutoIt: 3.3.14.0
Radik  [?]
Цитировать
Где-то можно посмотреть назначение констант?
TreeScope enumeration
В файле UIAutomate.au3 перед каждой функцией есть её описание. В описании функции _UIA_FindAllElementsEx() перечислены возможные константы с пояснениями.

Оффлайн tryinfinity [?]

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Почему то не идет поиск элемента по параметру AutomationId
Код: AutoIt [Выделить]
$oElementAddButton= _UIA_WaitControlTypeElement($oParent, "UIA_ButtonControlTypeId", "NewButton", "AutomationId");


upd: Перезапустил редактор, заработало)
« Последнее редактирование: Ноябрь 23, 2017, 16:26:51 от tryinfinity »

Оффлайн SuperSonic [?]

  • ЧТО СМОТРИШЬ, СОПЛЯК ?!
  • Новичок
  • *
  • Сообщений: 24
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
В какой кодировке были сохранены au3 файлы? У меня кракозябры одни  :stars:

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3672

  • Автор темы
  • Репутация: 975
    • Награды
  • Версия AutoIt: 3.3.14.0
SuperSonic  [?]
Цитировать
В какой кодировке
ANSI 1251

Русское сообщество AutoIt

Re: UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #262 Отправлен: Ноябрь 24, 2017, 15:37:57 »

Оффлайн SuperSonic [?]

  • ЧТО СМОТРИШЬ, СОПЛЯК ?!
  • Новичок
  • *
  • Сообщений: 24
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Ага спасибо. Однако странное решение сохранять в windows-1251. Исходя из того, что в файле присутствует ру-текст проще было бы сразу в utf.

У меня тут трабла -
Передаю дескриптор окна в _UIA_GetElementFromHandle, а он мне выдает пустое значение. А _UIA_GetControlTypeElement валится с ошибками. Хотя согласно Inspect я передаю все значения правильно.

!> _UIA_FindAllElementsEx : ?????? ???????? ??????? ???????
!> _UIA_FindAllElements : ?????? ???????? ??????? ????????? (????????)
!> _UIA_GetControlTypeElement : ?????? ???????? ??????? ????????? (????????)


Пытаюсь получить элемент - UIA_TreeControlTypeId



Добавлено: Ноябрь 24, 2017, 16:05:27
А ну и приложение над котором провожу эти действия отваливается в Not responding и грузит процессор свыше 50%.  Это как так?

@error = 4 - ошибка создания массива элементов (объектов)

Как эту ошибку исправить?
« Последнее редактирование: Ноябрь 24, 2017, 16:23:46 от SuperSonic »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3672

  • Автор темы
  • Репутация: 975
    • Награды
  • Версия AutoIt: 3.3.14.0
SuperSonic  [?]
Цитировать
согласно Inspect я передаю все значения правильно.
Значит, сломалась UDF. Видимо, магнитные бури. Пойду заварю кофе, протру хрустальный шар, подготовлю карты Таро, и начну искать проблему.

Оффлайн SuperSonic [?]

  • ЧТО СМОТРИШЬ, СОПЛЯК ?!
  • Новичок
  • *
  • Сообщений: 24
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
SuperSonic  [?]
Цитировать
согласно Inspect я передаю все значения правильно.
Значит, сломалась UDF. Видимо, магнитные бури. Пойду заварю кофе, протру хрустальный шар, подготовлю карты Таро, и начну искать проблему.




Добавлено: Ноябрь 24, 2017, 16:53:42
Короче какая-то мистика... стоит пересохранить файл в другой кодировке, то начинает плеваться другими ошибками - было 4, взял оригинальный файл стало 1. WTF?!  :think:


Добавлено: Ноябрь 24, 2017, 17:00:17
_UIA_GetElementFromHandle - Почему вот это возвращает ERROR 0 и пустое значение ?!?!
« Последнее редактирование: Ноябрь 24, 2017, 17:00:17 от SuperSonic, Причина: Объединение сообщений »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3672

  • Автор темы
  • Репутация: 975
    • Награды
  • Версия AutoIt: 3.3.14.0
SuperSonic
Мне совершенно всё равно, кто вы там у мамы, но я точно не ясновидящий. Без кода я проблему не решу.
А по поводу кодировки... Большинство элементов возвращает текст в ANSI, реже в UTF-16LE. Поэтому, если у вас в скрипте русский текст в UTF-8, то, вероятно, вы его не найдёте.


Добавлено: Ноябрь 24, 2017, 17:14:14
SuperSonic  [?]
Цитировать
возвращает ERROR 0 и пустое значение
А вы, что, пытаетесь значение _UIA_GetElementFromHandle в консоль вывести?
« Последнее редактирование: Ноябрь 24, 2017, 17:14:14 от InnI, Причина: Объединение сообщений »

Оффлайн SuperSonic [?]

  • ЧТО СМОТРИШЬ, СОПЛЯК ?!
  • Новичок
  • *
  • Сообщений: 24
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
У меня нет в коде нигде русского текста в отличие от вашей UDF.

Да какой там код... 3 строчки

Run("TU.EXE")
Local $_hWnd = WinWait("Total Uninstall Ultimate Edition","",30); Тут все отлично возвращает $_hWnd

; Создание элемента с использованием дескриптора окна
$oParent = _UIA_GetElementFromHandle($_hWnd); - ОШИБКА 0 Результат ПУСТ
а если запустить вот так:
$oParent = _UIA_GetElementFromHandle(WinGetHandle("Total Uninstall Ultimate Edition")); - Приложение падает в Not Responding

ConsoleWrite("PARENT: " & $oParent & " ERROR: " & @error)
все финиш






Добавлено: Ноябрь 24, 2017, 17:25:40
Цитировать
А вы, что, пытаетесь значение _UIA_GetElementFromHandle в консоль вывести?
Это уже от безысходности.


Добавлено: Ноябрь 24, 2017, 17:30:51
Вот такое содержимое ошибки мне выдает windows когда приложение падает в not responding
Description:
  A problem caused this program to stop interacting with Windows.

Problem signature:
  Problem Event Name: AppHangB1
  Application Name: Tu.exe
  Application Version: 6.14.0.310
  Application Timestamp: 55683aff
  Hang Signature: 4216
  Hang Type: 0
  OS Version: 6.1.7601.2.1.0.256.4
  Locale ID: 1049
  Additional Hang Signature 1: 4216bcef3f01d01eda08c7ad2d499542
  Additional Hang Signature 2: 6ca9
  Additional Hang Signature 3: 6ca9d21ad33603cc29ec539fdec53a18
  Additional Hang Signature 4: 4216
  Additional Hang Signature 5: 4216bcef3f01d01eda08c7ad2d499542
  Additional Hang Signature 6: 6ca9
  Additional Hang Signature 7: 6ca9d21ad33603cc29ec539fdec53a18

Вот такой код отправляет приложение в нокаут:
Код: AutoIt [Выделить]
Run("TU.EXE")
Local $_hWnd = WinWait("Total Uninstall Ultimate Edition","",30);
$oParent = _UIA_GetElementFromHandle($_hWnd)
If Not @error Then
    $oList = _UIA_GetControlTypeElement($oParent, $UIA_TreeControlTypeId, "Installed programs")
    ConsoleWrite("RESULT: " & @error)
EndIf
 

« Последнее редактирование: Ноябрь 24, 2017, 17:43:41 от SuperSonic »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3672

  • Автор темы
  • Репутация: 975
    • Награды
  • Версия AutoIt: 3.3.14.0
SuperSonic
Да, действительно. Приложение "Total Uninstall 6" не поддерживает работу с интерфейсом IUIAutomation. Об этом говорит появление окон "Invalid variant operation" при работе Inspect с этим приложением. Также я проверил некоторые функции поиска - все возвращают ошибки создания объектов. Так что, в этой теме, я вам ничем помочь не смогу.

Оффлайн SuperSonic [?]

  • ЧТО СМОТРИШЬ, СОПЛЯК ?!
  • Новичок
  • *
  • Сообщений: 24
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
Об этом говорит появление окон "Invalid variant operation" при работе Inspect с этим приложением.
У меня такое окно не появляется  :blink:

Ну по крайней мере на Win 7 Inspect прекрасно "видит" эту софтину


Добавлено: Ноябрь 24, 2017, 18:30:26
:o только сказал, что оно у меня не появляется и на тебе - появилось
« Последнее редактирование: Ноябрь 24, 2017, 18:30:26 от SuperSonic, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #269 Отправлен: Ноябрь 24, 2017, 18:20:47 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
70016 Просмотров
Последний ответ Сентябрь 22, 2010, 22:13:33
от CreatoR
18 Ответов
13048 Просмотров
Последний ответ Сентябрь 18, 2011, 20:49:26
от Zalman1980
9 Ответов
5250 Просмотров
Последний ответ Март 12, 2012, 00:33:05
от cobra2029
0 Ответов
1893 Просмотров
Последний ответ Май 07, 2012, 15:00:44
от Dedullika
18 Ответов
4674 Просмотров
Последний ответ Октябрь 17, 2012, 00:07:30
от Kaster
0 Ответов
1927 Просмотров
Последний ответ Декабрь 02, 2012, 10:15:22
от madmasles
6 Ответов
3301 Просмотров
Последний ответ Декабрь 10, 2012, 11:30:14
от Zergii
3 Ответов
1860 Просмотров
Последний ответ Декабрь 21, 2014, 19:24:21
от brain
8 Ответов
2178 Просмотров
Последний ответ Ноябрь 26, 2015, 17:54:56
от Garrett
22 Ответов
2192 Просмотров
Последний ответ Июнь 09, 2017, 01:12:34
от Alofa