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

以编程方式调用C#表单Outlook加载项中的下拉项,c#,outlook,outlook-addin,outlook-redemption,split-button,C#,Outlook,Outlook Addin,Outlook Redemption,Split Button,我有一个outlook加载项,我想从中使用Redemption调用Ribbon Split按钮的下拉项。此拆分按钮是从其他加载项创建的自定义按钮。我想在外接程序中访问。有关详细说明,请查看以下链接。当我尝试访问时,我得到了相同的错误。有人能帮我解决这个问题吗。 在这里,我试图调用下拉项,在另一篇文章中,我试图调用拆分按钮的按钮,而且我附上了非常清晰的图片。 检查链接中的图像。 (该链接帖子已由堆栈中的其他人发布) 如果需要在Office应用程序中执行任何控件的操作,则需要使用CommandBar

我有一个outlook加载项,我想从中使用Redemption调用Ribbon Split按钮的下拉项。此拆分按钮是从其他加载项创建的自定义按钮。我想在外接程序中访问。有关详细说明,请查看以下链接。当我尝试访问时,我得到了相同的错误。有人能帮我解决这个问题吗。 在这里,我试图调用下拉项,在另一篇文章中,我试图调用拆分按钮的按钮,而且我附上了非常清晰的图片。 检查链接中的图像。 (该链接帖子已由堆栈中的其他人发布)


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

在没有特定命令的对象模型的情况下,此方法非常有用。用于内置按钮、切换按钮和拆分按钮的控件。失败时,对于无效的IdMso,它返回E_InvalidArg;对于未启用或不可见的控件,它返回E_Fail

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


如果您需要运行来自另一个外接程序的任何自定义控件的操作,您可以使用.Net中反射表示的后期绑定技术直接调用事件处理程序。有关更多信息,请参阅方法。该方法在文章中有详细介绍。

无论使用何种编程语言,都无法像使用CommandBars界面一样自由访问Office功能区中的按钮。这是微软的设计决定

正如其他人提到的,有访问Office应用程序提供的内置控件的规定:commandbar.ExecuteMso和可访问性API。但是,这些不适用于自定义按钮

可以“共享”另一个外接程序的功能区控件,前提是该外接程序对其共享的控件使用了命名空间和idQ属性。但是,这不允许您的代码运行其他加载项代码。(请参阅本MSDN文章:)


唯一的可能性是使用SendKeys(模拟用户键入)为命令发送Alt+键盘快捷键组合,但这不是一个可靠的方法。这不可靠的原因是Office可以随时更改快捷方式,如果它与UI中特定时刻存在的任何其他快捷方式冲突。

可能重复的我不应该使用的快捷方式。我想要任何其他方法来完成这件事。理想情况下,我必须控制“使用模板添加”并对该按钮执行默认操作。正如其他海报所述,您别无选择,只能使用Microsoft Active Accessibility(MSAA)界面来自动化功能区交互。再见,谢谢。我通读了这些链接。在分割按钮控制中提到,我们可以执行accDefaultAction,但在我的代码中,通过赎回控制按钮,我没有得到任何类似accDefaultAction的东西。我们如何在拆分按钮上获得accDefaultAction?您可能需要直接使用MSAA API,而不是通过赎回,因为赎回只是一个包装,不具备MSAA API的全部功能。嗨,Eugene。在commandbar中,我有一个名为Findcontrol的方法,它询问控件Id。我们如何在C#中找到控件Id?按钮是一个自定义按钮。@Vikram
FindControl
仅适用于旧的(2007年以前)工具栏。这对丝带不起作用。谢谢你的回复辛迪。是否有一种方法可以通过编程方式访问拆分按钮的顶部按钮(“使用模板添加”而不是下拉按钮)?我必须只使用SendKeys吗?SendKeys是您唯一的选择。除非编写其他外接程序的人“公开”该类,以便您可以直接调用它(换句话说,不使用Ribbon)。Okie。。是不是应该用在按钮控制上??实际上,我试着在我从《救赎》中获得的按钮控件上使用它。它不起作用,。我可以在这里使用任何有关sendkeys的资料?嗨,辛迪,谢谢你的建议。工作正常。如何单击“添加模板拆分”按钮。(不是下拉菜单“添加模板”)。