我尝试以编程方式访问Outlook Ribbon上的某些按钮。 我正在使用:
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
CommandBar command = app.ActiveExplorer().CommandBars.OfType<CommandBar>().First();
CommandBarControl button = command.Controls.OfType<CommandBarControl>().Where(x => x.Caption == "label of my button").First();
button.Execute();
问题是每个CommandBars只返回1控制...如何访问功能区内的所有控件?
由于
答案 0 :(得分:1)
命令栏已弃用且不再使用(仅用于以编程方式执行按钮)。您需要使用Fluent UI。
但是Fluent用户界面没有提供以编程方式迭代现有控件的任何方法。作为一种解决方法,您可以使用Accessibility API(Windows API)函数来完成工作。
您可以在MSDN的以下文章中阅读有关功能区UI的更多信息:
答案 1 :(得分:1)
正如Eugene所提到的,您可以使用辅助功能API。 如果使用Redemption是一个选项,它会公开SafeExplorer和SafeInspector个对象,这些对象提供对功能区控件的访问权限并允许执行其默认操作。下面的例子(VB脚本)执行&#34; OneNote&#34; &#34; Home&#34;上的按钮功能区:
set sExplorer = CreateObject("Redemption.SafeExplorer")
sExplorer.Item = Application.ActiveExplorer
set Ribbon = sExplorer.Ribbon
oldActiveTab = Ribbon.ActiveTab
Ribbon.ActiveTab = "Home"
set Control = Ribbon.Controls("OneNote")
Control.Execute
Ribbon.ActiveTab = oldActiveTab 'restore the active tab