检测画廊是否在 Windows 功能区框架中打开

Detect if gallery is open in Windows Ribbon Framework

我正在寻找一种检测功能区库是否打开的方法。我正在使用 Delphi 功能区框架,它实现了 IUICollection。我使用 IUIFramework.GetUICommandProperty 尝试了几个属性(例如 UI_PKEY_Viewable、UI_PKEY_Enabled),但这些都没有 returns 画廊下拉列表的 "open/closed" 状态。

有谁知道这是否可能?

我可以使用 IAccessible 界面解决这个问题。 (参见 https://msdn.microsoft.com/en-us/library/windows/desktop/dd318466(v=vs.85).aspx

幸运的是,我们已经有了查找特定 UI 元素的功能。它使用单元 Winapi.oleacc 中的 AccessibleObjectFromWindow; 从主应用程序 window 句柄中检索 IAccessible object。

从那里开始,它使用 AccessibleChildren 递归检查 child 项,如下所述: http://msdn.microsoft.com/en-us/library/windows/desktop/dd317975(v=vs.85).aspx 并将当前元素的名称与给定参数进行比较。

作为参数,我使用图库中第一项的标题。此项目仅在画廊打开时可用,因此使用我们的自定义 "FindElement" 功能,我能够区分可见的弹出窗口和关闭的弹出窗口。

这可能不是最好的解决方案,但恐怕没有其他...