Такое событие будет полезно в ИР адаптере для отображения уведомления пользователю с подсказкой закрыть COM приложение. А то сейчас в файловой базе ему надо помнить про команду "ИР Закрыть служебное приложение".
Событие должно срабатывать при появлении следующего окна

Проверять наличие окна можно каждые 1000мс. Такой оперативности обнаружения будет достаточно.
#1, 28 октября 2023 00:09
Можно навесить триггер на него. Как сделано в Закрывашке.
Сделать скрипт
//@trigger 1
//@filter ^Конфигуратор$
В нем проверить на нужный текст и вызвать событие.
#2, 28 октября 2023 00:14
Это не отменяет полезность события, например ПриПоявленииОкна или что-то такое. Но на первое время может хватить.
#3, 28 ноября 2023 14:24
Еще для ИР адаптера будет очень полезно сделать автоматическое нажатие кнопки "Обновить динамически". Поэтому событие ПриПоявленииОкна нужно.
tormozit изменил статус на Открыто
#4, ред. 30 ноября 2023 18:54
Более внимательно собрал статистику. Эта доработка бы заметно сэкономила число механических операций за мой средний рабочий день, т.к. обновление БД я делаю часто и каждый раз приходится целиться к кнопку "Обновить динамически".
#5, 30 ноября 2023 23:21
(4) tormozit, напомни, почему нельзя Закрывашку использовать для этого?
#6, 30 ноября 2023 23:25
Если она в этой фигне умеет нажимать ОК, то и там нажмет кнопку.
#7, 30 ноября 2023 23:27
И текст окон она понимает и гибко настроить можно, только на нужное окно.
#8, ред. 30 ноября 2023 23:30
Мне нужен обработчик внутри скрипта "ИР адаптер", в котором я буду учитывать условия перед отправкой нажатия кнопки в появившемся диалоге.
Закрывашка работает только как отдельный скрипт. Поэтому не могу сделать в своем скрипте то же самое.
Но действительно функционал Закрывашки очень похож на то, что нужно.
#9, ред. 30 ноября 2023 23:33
ПриПоявленииОкна = добавлению в скрипт
//@trigger 1
//@filter ^Конфигуратор$
Можно сделать отдельный скрипт, который будет срабатывать при появлении окна "Конфигуратор".
#10, 30 ноября 2023 23:35
Можно это попробовать привязать к команде, а не целому модулю через аннотации, но самый простой вариант конечно - @trigger
#11, ред. 30 ноября 2023 23:37
так можно текст найти нужный
#12, 30 ноября 2023 23:37
Из отдельного скрипта можно загрузить основной скрипт и вызывать его методы если нужно
#13, ред. 30 ноября 2023 23:40
ПриОткрытииОкна() чем плохо, тем что придется при появлении любого окна вызывать скрипт, который будет делать проверки, является ли окно нужным. А триггер сработает только на нужном окне.
#14, 30 ноября 2023 23:52
Но в целом, если мы дергаем скрипты даже при вызове подсказки, то навесить на появление окна, то не так критично.
#15, ред. 01 декабря 2023 00:36
Так и не понял, можно в моем скрипте "ИР адаптер" это (обработать появление заданного окна) как то сделать или нет. Если можно, прошу показать пример. Если нет, прошу добавить такую возможность.
#16, 01 декабря 2023 00:40
(15) tormozit, можно. Если рядом положить отдельный скрипт, у которого в шапке должны быть директивы
//@trigger 1
//@filter ^Конфигуратор$
В скрипте код проверки
#17, 01 декабря 2023 00:42
Если прям в одном файле, то тоже можно,
Добавить
//@trigger 1
//@filter ^Конфигуратор$
В теле скрипта, добавить проверку заголовка на "Конфигуратор", т.к. не ясно вызывался скрипт по тригеру или принудительно и код выше.
#18, ред. 01 декабря 2023 07:38
Предложенный способ работает.
Но хотелось бы более четкий признак того, что скрипт вызван из-за открытия окна. Иначе любая команда, вызванная при открытом окне, будет повторно пытаться обработать событие открытия окна. Иными словами хотелось бы нормальное событие "ПриОткрытииОкна".
#19, 01 декабря 2023 16:40
Добавлено в тестовой 6.0.8735.33292
bolsun изменил статус на Закрыто
#20, 02 декабря 2023 09:37
Примерно каждый 5-й раз триггер не срабатывает. Вот лог с последней версии Турбоконф до добавления события ПриОткрытииОкна. Окно появилось, но событие не вызывалось. Возможно это происходит когда окно сразу теряет фокус. Непонятно почему это происходит и как побеждать.
Ссылка скрыта
tormozit изменил статус на Открыто
#21, 02 декабря 2023 09:57
Новый обработчик ПриОткрытииОкна(Параметры) проверил. Работает, но с той же проблемой.
#22, 02 декабря 2023 10:01
Снял аналогичный лог на новой версии Турбоконф
Ссылка скрыта
#23, ред. 02 декабря 2023 11:20
Похоже после нажатия "Да" в этом окне окно "Конфигуратор" часто не обнаруживается, т.к. открывается без захвата фокуса.

Но и в других ситуациях такое иногда происходит.
#24, ред. 02 декабря 2023 13:32
(23) tormozit, почему оно теряет фокус? у меня вроде такого не было никогда с закрывашкой
#25, ред. 02 декабря 2023 13:44
Ты убрал из шапки скрипта //@trigger и т.д.? Нужно убрать.
Как бы скрипт вызывается по триггеру перед обработчиком и фокус уходит в клиентское окно.
#26, ред. 02 декабря 2023 14:02
#27, 02 декабря 2023 14:05
Триггер и обработчик не будут вместе работать корректно.
В логе видно, что триггер сработал на окно корректно, а обработчик уже нет. Т.к. фокус ушел.
#28, ред. 02 декабря 2023 14:13
Смотри первый лог в сообщении #20. Там нет события ПриОткрытииОкна. А фокус все равно ушел. Значит кто то его уводит и без нового события. Хотелось бы понять почему уходит фокус.
#29, 02 декабря 2023 14:12
(28) tormozit, я вижу, что там сработал скрипт.
#30, 02 декабря 2023 14:14
Появилось окно и скрипт был вызван. Забирает клиентское окно скорее всего. Значит в обработчике в параметрах нужно передать тебе указатель на окно, чтобы ты вернул фокус вручную.
#31, ред. 02 декабря 2023 14:20
(29) tormozit, сделай чистый скрипт, с одним обрабочиком (без ИР и COM). Проверь несколько раз, если фокус уйдет, то проблема не в клиентском.
Но мне бы давно уже сообщили о такой проблеме, пользователи Закрывашки. И у меня ни разу такого не было.
Только отключи RDT перед этим //@script_disabled 1
#32, 02 декабря 2023 18:56
(31), @tormozit, пробовал чистый тест выше?
#33, 02 декабря 2023 19:05
Пока нет
#34, ред. 02 декабря 2023 21:32
Уже несколько раз заметил, что скрипт выполнил все задуманные строки. но кнопка "Обновить динамически" не нажалась. При этом был слышен системный звук ОС, который обычно играет при попытке кликнуть туда, где запрещено. Фокус находился в ожидаемом состоянии (в окне "Конфигуратор").
Возможно виновато отставание получения окном фокуса ввода от генерации события. Попробовал вставить Ждать(100), но это не помогло.
Тогда возможно нужно какое то улучшение в методе Турбоконфа КликнутьПоЭлементу().
Ссылка скрыта
#35, 02 декабря 2023 21:48
(34) tormozit, почему не использовать клавиатуру для нажатия?
#36, 02 декабря 2023 21:54
(34) tormozit, https://disk.yandex.ru/d/XKCz9ijzgtoO1w
Эту версию еще попробуй через клик, я в АПИ другую реализацию прокинул.
#37, 02 декабря 2023 22:08
(35) bolsun, клавиатура в данном случае менее надежна, т.к. клавиши Влево/Вправо циклически перемещают фокус между кнопками.
#38, 02 декабря 2023 22:09
Проверил на версии 6.0.8736.42963
Проблема осталась.
Ссылка скрыта
#39, 02 декабря 2023 22:15
(38) tormozit, не понимаю что происходит в этом логе, окно появилось, обработчик был вызван, затем много раз было нажатие Вправо. Много там всего происходит.
Можно новый чистый лог, сразу после появления окна?
#40, ред. 02 декабря 2023 22:20
100 мс ожидания кстати может быть мало при появлении окна, попробуй 200мс
#41, ред. 02 декабря 2023 22:23
Поставил 200мс. Проблема осталась.
Ссылка скрыта
#42, ред. 02 декабря 2023 22:24
(36) bolsun, новый подход дает 0% срабатываний. Поэтому прошу вернуть старый. Там значительно чаще срабатывало.
#43, 02 декабря 2023 22:27
(42) tormozit, скинь скрипт текущий
#44, 02 декабря 2023 22:27
RDT.os
#45, 02 декабря 2023 22:50
Окно кстати похоже багнутое, т.к. в нем не работает Esc, кнопка закрытия и вообще оно странное.
#46, 02 декабря 2023 22:54
Клики оно тоже странно обрабатывает.
Вместо клика, это работает хорошо, можно даже без ожидания.
#47, ред. 02 декабря 2023 23:05
Скорее это работает хорошо в текущей версии платформы. В следующей переставят кнопки местами и будет нехорошо.
#48, ред. 02 декабря 2023 23:31
(47) tormozit, могут много что поменять (название кнопки, окна и т.д.) что же теперь делать.
Ладно, вот другой метод для установки фокуса.
API 6
Устанавливает фокус на элемент, если он поддерживает эту функцию.
https://disk.yandex.ru/d/XKCz9ijzgtoO1w
#49, 02 декабря 2023 23:32
@tormozit, этот метод устанавливает фокус не мышью и не клавой, а через методы UIAutomation. На кнопках, чекбоксах, элементах меню можно использовать.
#50, 02 декабря 2023 23:48
С новым методом УстановитьФокусНаЭлемент() и затем отправкой нажатия клавиши ENTER работает стабильно. И этот новый метод думаю еще много где можно будет применить для повышения надежности.
tormozit изменил статус на Закрыто
#51, ред. 03 декабря 2023 00:10
Прошу вернуть начальное поведение метода КликнутьПоЭлементу(). В новой версии он
Не удалось выполнить скрипт ИРАдаптер->ПерейтиКОпределению
ScriptEngine.Machine.RuntimeException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 558 / Использование процедуры, как функции}
Если ТурбоКонф.КликнутьПоЭлементу(СтруктураСсылки.УсловиеОстанова + " Условие", Неопределено, 0, Ложь) Тогда // Было 1000мс. Исправлено
в ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, ScriptOptions options, IVariable[] parameters)
tormozit изменил статус на Открыто
#52, 03 декабря 2023 14:40
(51) tormozit, https://disk.yandex.ru/d/XKCz9ijzgtoO1w
#53, 03 декабря 2023 14:50
Поведение КликнутьПоЭлементу() восстановилось. Но пропал добавленный вчера метод УстановитьФокусНаЭлемент()
#54, 03 декабря 2023 15:11
(53) tormozit, https://disk.yandex.ru/d/XKCz9ijzgtoO1w
#55, 03 декабря 2023 15:13
Теперь обе проблемы устранены.
tormozit изменил статус на Закрыто