ПолучитьТипТекущегоЭлемента() и ПолучитьИмяЭлемента() не видят контекстное меню в дереве конфигурации

tormozit На выяснении

Если скриптом открыть контекстное меню в дереве конфигурации, то методы ПолучитьТипТекущегоЭлемента() и ПолучитьИмяЭлемента() ведут себя так, как будто фокус в дереве конфигурации, т.е. возвращают элемент списка дерева, вместо элемента меню.
Насколько нормально такое их поведение?

Уже много раз сталкивался с этой проблемой в рамках задачи надежного ответа на вопрос "Открылось ли контекстное меню".

Пока нашел такой умеренно надежный способ обхода

		Или ТурбоКонф.НайтиЭлементПоИмени("Свойства", "элемент меню")
		Или ТурбоКонф.НайтиЭлементПоИмени("Добавить", "элемент меню")

Комментарии

bolsun
#1, 13 января 2025 22:53

Используй Если ПолучитьТипТекущегоЭлемента = ТипЭлемента.ЭлементМеню Тогда это меню.


tormozit
#2, 13 января 2025 22:57

(1) bolsun, так и делал изначально, но это условие не выполняется, даже если я жду 1000мс


bolsun
#3, ред. 13 января 2025 23:02

(2) tormozit, да, не работает, т.к. фокус не уходит в это меню.


bolsun
#4, 13 января 2025 23:11

У меня есть другие методы, которые возвращают правильное значение типа и имени текущего элемента (полученные при событии OnFocusChange UIAutomation, проброшу в API.


bolsun
#5, 13 января 2025 23:56

6.3.9145.3319
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg

API
Добавлены методы
ПолучитьИмяАктивногоЭлемента()
ПолучитьТипАктивногоЭлемента()
Возвращают имя или тип на основе события UIAutomation OnFocusChanged


tormozit
#6, 14 января 2025 00:29

Новый метод выдает тот же неожиданный тип - элемент списка. Вот код

Попытка
	ТипАктивногоЭлемента = ТурбоКонф.ПолучитьТипАктивногоЭлемента();
Исключение
	// < 6.3.9145.3319
	ТипАктивногоЭлемента = Неопределено;
КонецПопытки;
Сообщить("ТипАктивногоЭлемента=" + ТипАктивногоЭлемента);

Пробовал перед ним задержку 100мс - не помогло.


bolsun
#7, 14 января 2025 00:31

(6) tormozit, я проверял на уже открытом меню. возможно нужна большая задержка.


tormozit
#8, 14 января 2025 00:34

Проверил с задержкой 200мс - результат тот же. Причем проверки на наличие элемента меню по его имени срабатывают довольно надежно и без задержки.


tormozit
#9, 14 января 2025 00:36

Ссылка скрыта


bolsun
#10, 14 января 2025 00:48

(9) tormozit, добавь в скрипт ShowOutputForm

Сообщить(ТурбоКонф.ПолучитьИмяАктивногоЭлемента());
Сообщить(ТурбоКонф.ПолучитьТипАктивногоЭлемента());

вызови меню, а затем Служебные сообщения.


bolsun
#11, 16 января 2025 14:51

bolsun изменил статус на На выяснении


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера