C#Outlook以编程方式访问CommandBar

时间:2015-07-27 14:26:17

标签: c# outlook office-interop

我尝试以编程方式访问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控制...如何访问功能区内的所有控件?

由于

2 个答案:

答案 0 :(得分:1)

命令栏已弃用且不再使用(仅用于以编程方式执行按钮)。您需要使用Fluent UI。

但是Fluent用户界面没有提供以编程方式迭代现有控件的任何方法。作为一种解决方法,您可以使用Accessibility API(Windows API)函数来完成工作。

您可以在MSDN的以下文章中阅读有关功能区UI的更多信息:

答案 1 :(得分:1)

正如Eugene所提到的,您可以使用辅助功能API。 如果使用Redemption是一个选项,它会公开SafeExplorerSafeInspector个对象,这些对象提供对功能区控件的访问权限并允许执行其默认操作。下面的例子(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