Что нового

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

paa13

Новичок
Сообщения
44
Репутация
1
Уберите обновление и узнаете - в этом дело или нет.
Ничего не поменялось.

утечка прекращается если снять галки со всех чекбоксов, если хоть 1 включен, срабатывает эта строка и сразу начинает расти память
$aElem = _UIA_FindElementsInArray($aText, "Name", GUICtrlRead($checksys[$i], 1), True)
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
paa13
Подозреваю, что после нажатия "Обновить" страница не успевает загрузиться. Сделайте задержку - дождитесь загрузки страницы.
 

paa13

Новичок
Сообщения
44
Репутация
1
Подозреваю, что после нажатия "Обновить" страница не успевает загрузиться. Сделайте задержку - дождитесь загрузки страницы.

Обновление я полностью отключил, но даже на статичной странице память начинает расти с каждым циклом. по сути ей все равно какая страница, вкладка, свернут ли браузер. тока полностью закрытие браузера. сразу обнуляет накопившуюся пямять
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
paa13
Откройте UIAutomate.au3. После строки №585 добавьте $vValue = 0, чтобы получилось так
Код:
...
      EndIf
    EndIf
    $vValue = 0 ; <= добавить
  Next
  ReDim $aArray[$j]
...
Сохраните UIAutomate.au3 (она может быть "только для чтения") и попробуйте.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Обновление до версии 1.8:
- предотвращены возможные утечки памяти при перезаписи указателей
- добавлена проверка на наличие элементов в массиве для функций, принимающих массив
 

tryinfinity

Новичок
Сообщения
40
Репутация
0
В приложении telegram не находит вообще никаких параметров. Может нужно добавить еще какую библиотеку?
Как то autoit не дружит с телеграмом, или я плохо искал.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
tryinfinity
В приложении telegram не находит вообще никаких параметров
Уровень поддержки программой интерфейса IUIAutomation определяет сам разработчик. Если Inspect не находит какие-то параметры, значит их нет.
 

saintfr3ak

Новичок
Сообщения
2
Репутация
0
Помогите пожалуйста. Сделал небольшой скрипт, для автоматизации обновлений в 1с.

В общем, в начале цикла я задаю параметры
Код:
_UIA_setVar("MenuConfig","Controltype:=UIA_ButtonControlTypeId;Class:=;Title:=Конфигурация") ; Элементы 1с GUI
_UIA_setVar("OpenConfig","Controltype:=UIA_MenuItemControlTypeId;Class:=;Title:=Открыть конфигурацию")
_UIA_setVar("Support","Controltype:=UIA_MenuItemControlTypeId;Class:=;Title:=Поддержка")
_UIA_setVar("UpdateConf","title:=Обновить конфигурацию...;ControlType:=UIA_MenuItemControlTypeId")
_UIA_setVar("Next","Classname:=V8FormElement;Title:=Далее >")
_UIA_setVar("OK","Classname:=V8FormElement;Title:=ОК")
_UIA_setVar("Buh","Controltype:=UIA_ListItemControlTypeId;Class:=;Title:=Бухгалтерия предприятия")
_UIA_setVar("UpdPlease","Classname:=V8FormElement;Title:=Продолжить обновление")
_UIA_setVar("Yes","Classname:=V8FormElement;Title:=Да")
_UIA_setVar("Yep","Classname:=V8FormElement;Title:=Принять")
_UIA_setVar("NoUpdates","Classname:=V8FormElement;Title:=Доступных обновлений в указанных каталогах не найдено. Для изменения параметров поиска нажмите кнопку Назад и укажите новую область поиска.")

А потом с помощью _UIA_action("OK","click") (например) их запускаю, в зависимости от всплывающего окна по свичу. В общем всё работает, но проблема в том, что у тех же кнопок подтверждения очень часто имя класса и тайтл совпадает и почему-то я не могу использовать один экшен дважды-трижды и так далее. На второй раз, если это уже новое окно - UIAutomate не находит кнопку.

Я так понимаю, что где-то в глобальный массив записываются данные, в какой именно понять не могу. Повторно _UIA_setVar тоже не работает. Такая ерунда.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
saintfr3ak
Судя по коду, вы используете UDF с официального форума. Но эта тема к UIAWrappers.au3 никакого отношения не имеет. Или создайте отдельную тему, или задайте вопрос на английском форуме.
 

saintfr3ak

Новичок
Сообщения
2
Репутация
0
Ммм, прошу прощения. Мне гугль подсунул эту тему по запросу "_UIA_action", но может оно и к лучшему. Перепишу код с использованием вашей библиотеки. Судя по семплу, описанных мною проблем тут нет.
 

Garrett

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

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

Radik

Новичок
Сообщения
71
Репутация
1
Добрый день!
Замечательная у вас трава библиотека, осваиваю.
Очень замечательный и нужный инструмент. Когда в проге надо пройтись по 3000-5000 записей
и работать с элементами, которые через AutoIt Window Info не видно и доступа к БД нет.
Наткнулся я на такую проблему: есть элемент $UIA_TableControlTypeId, у него 4 Children (строки).
У строк - 10 Children (столбцы). В списке функций есть
Код:
_UIA_ElementGetFirstLastChild
и
Код:
_UIA_ElementGetPreviousNext
.
Я так понял, чтобы пройти по строкам надо 4 цикла, а внутри каждого из них 10 циклов по столбцам?
Понятно, что это фигня какая-то, всяко есть нормальное решение.
Есть еще такой вариант
Код:
#include <UIAutomate.au3>

$hWnd = WinActivate("Программа")
$oParent = _UIA_GetElementFromHandle($hWnd)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_TableControlTypeId", "Grid1")
$aAllElements = _UIA_FindAllElements($oParent)

For $i = 1 To $aAllElements[0]
   $aElement = _UIA_ElementGetPropertyValue($aAllElements[$i], "Name")
   $sElement = _UIA_ElementGetPropertyValue($aAllElements[$i], "LegacyIAccessible.Value")
   MsgBox(4096, $i, $aElement & @CRLF & $sElement)
Next

Пробежать по всем и запомнить, что мне нужны элементы № 25, 41, 77 и т.д.,
но это как-то не кошерно.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Radik [?]
элемент $UIA_TableControlTypeId, у него 4 Children (строки).У строк - 10 Children (столбцы)
Странная у вас таблица. Я с такими не сталкивался. Обычно у таблицы все ячейки идут последовательно, имеют тип UIA_DataItemControlTypeId и различаются свойствами GridItem.Row и GridItem.Column.

И ещё я не понял - в чём вопрос? Делайте так, как вам удобно и/или понятно.

Пробежать по всем и запомнить, что мне нужны элементы № 25, 41, 77
Если в функции _UIA_FindElementsInArray() установить последний параметр в True, то она вернёт массив ИНДЕКСОВ исходного массива элементов.
 

Radik

Новичок
Сообщения
71
Репутация
1
А все-таки, если у элемента 8 children, чтобы по ним пройтись надо делать 8 циклов?
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Radik [?]
чтобы по ним пройтись
Что значит "пройтись"? Какую цель вы преследуете? Если вам нужно отделить "детей" от "внуков", то можно сначала найти только "детей"
Код:
$aChild = _UIA_FindAllElementsEx($oParent, Default, $TreeScope_Children)
а затем для каждого "ребёнка" найти "внуков". Или можно общий одномерный массив разделить на (количество столбцов + 1) и получите псевдотаблицу, где в начале каждой "строки" будет "ребёнок", а за ним "внуки".
 

Radik

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

alex33

Скриптер
Сообщения
1,457
Репутация
186
Sabat0n
А может лучше как-нибудь через API сделать?
А еще лучше зайти в настройки оповещений и в разделе "Оповещения по электронной почте", выставив параметр "Частота оповещений" в "Всегда оповещать" и чуть ниже отметить нужные события?
 

Radik

Новичок
Сообщения
71
Репутация
1
InnI сказал(а):
Radik [?]
чтобы по ним пройтись
Что значит "пройтись"? Какую цель вы преследуете? Если вам нужно отделить "детей" от "внуков", то можно сначала найти только "детей"
Код:
$aChild = _UIA_FindAllElementsEx($oParent, Default, $TreeScope_Children)
а затем для каждого "ребёнка" найти "внуков". Или можно общий одномерный массив разделить на (количество столбцов + 1) и получите псевдотаблицу, где в начале каждой "строки" будет "ребёнок", а за ним "внуки".
Где-то можно посмотреть назначение констант?
Ладно вы мне подсказали про $TreeScope_Children, а их там - 1200 строк.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Radik [?]
Где-то можно посмотреть назначение констант?
TreeScope enumeration
В файле UIAutomate.au3 перед каждой функцией есть её описание. В описании функции _UIA_FindAllElementsEx() перечислены возможные константы с пояснениями.
 
Верх