以编程方式调用 C# 窗体 Outlook 加载项中的下拉项

Programmatically invoking the drop down item in C# form Outlook Add-in

我有一个 outlook 加载项,我想从中使用 Redemption 调用 Ribbon Split 按钮的下拉项。此拆分按钮是从其他加载项创建的自定义按钮。我想在我的加载项中访问。有关详细说明,请查看下面的 link.Invoking the Ribbon Split button using redemption 当我尝试访问时,我遇到了同样的错误。有人可以帮我解决这个问题吗? 在这里,我试图调用下拉项目,而另一个 post 试图调用拆分按钮的按钮,而且我附上了非常清晰的图像。 检查 link 中的图像。 (link post 早已被其他人 post 编辑在堆栈溢出中)

如果您需要在 Office 应用程序中执行任何控件的操作,您需要使用 CommandBars class 的 ExecuteMso 方法(参见 Explorer.CommandBars 或 Inspector.CommandBars ).它允许执行由 idMso 参数标识的控件。以下是 MSDN 对该方法的说明:

在特定命令没有对象模型的情况下,此方法很有用。适用于内置按钮、toggleButtons 和 splitButtons 的控件。失败时 returns E_InvalidArg 表示无效的 IdMso,E_Fail 表示未启用或不可见的控件。

您可以在以下文档中找到内置控件列表:

如果您需要 运行 来自另一个加载项的任何自定义控件的操作,您可以使用 .Net 中以反射为代表的后期绑定技术直接调用事件处理程序。请参阅 Type.InvokeMember method for more information. The approach is described in depth in the Calling Code in VSTO Add-ins from Other Office Solutions 文章。

您无法像使用 CommandBars 界面那样自由访问 Office 功能区中的按钮 - 无论使用何种编程语言。这是 Microsoft 的设计决定。

正如其他人提到的那样,有访问 Office 应用程序提供的内置控件的规定:CommandBars.ExecuteMso 和辅助功能 API。然而,这些不适适用于自定义按钮。

可以 "share" 另一个加载项的功能区控件,前提是该加载项已将命名空间和 idQ 属性用于它共享的控件。但是,这不会使您的代码能够 运行 其他加载项代码。 (请参阅这篇 MSDN 文章:https://msdn.microsoft.com/en-us/library/aa338202(v=office.12)

唯一但不可靠的可能性是使用 SendKeys(模拟用户键入)发送命令的 Alt+键盘快捷键组合。这是不可靠的原因是因为 Office 可以随时更改快捷方式,如果它与 UI.

中那个特定时刻存在的任何其他快捷方式发生冲突。