Определить, открыта ли галерея в Windows Ribbon Framework
Я ищу способ определить, открыта ли галерея ленты или нет. Я использую Delphi Ribbon Framework, который реализует IUICollection. Я пробовал несколько свойств, используя IUIFramework.GetUICommandProperty (например, UI_PKEY_Viewable, UI_PKEY_Enabled), но ни одно из них не возвращает состояние "открыто / закрыто" раскрывающегося списка галереи.
Кто-нибудь знает, возможно ли это вообще?
1 ответ
Я смог обойти это с помощью IAccessible
интерфейс.
(см. https://msdn.microsoft.com/en-us/library/windows/desktop/dd318466(v=vs.85).aspx).
К счастью, у нас уже была функциональность для поиска определенных элементов пользовательского интерфейса. Оно использует AccessibleObjectFromWindow;
от единицы Winapi.oleacc
, чтобы получить IAccessible
объект из дескриптора главного окна приложения.
Оттуда он рекурсивно проверяет дочерние элементы, используя AccessibleChildren
, как описано здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/dd317975(v=vs.85).aspx и сравнивает имя текущего элемента с заданным параметром.
В качестве параметра я использую заголовок первого элемента в галерее. Этот элемент доступен только в том случае, если галерея открыта, поэтому с помощью нашей пользовательской функции "FindElement" я смог различить видимое и закрытое всплывающее окно.
Это может быть не самым лучшим решением, но я боюсь, что нет другого...