使用VSTO插件以编程方式获取功能区列表

问题描述 投票:0回答:2

[我已经用Visual Studio 2019创建了一个C#VSTO加载项,它从套接字连接接收命令,它可以使用Office Interop插入文本,仅在功能区中修改按钮。

我想知道两件事。

  1. 如何获得所有功能区的名称(首页,插入,设计,....)以编程方式?
  2. 在除我创建的功能区之外的任何其他功能区上单击鼠标(例如,单击“主页”选项卡中的加粗按钮。

对于第二个问题,我只想使用Office加载项,而不是通过模拟按键/鼠标事件。

c# visual-studio vsto programmatically
2个回答
0
投票

如何以编程方式获得所有功能区(主页,插入,设计等)的名称?

没有简单的方法可以完成这项工作。您可以尝试使用Accessibility APIMicrosoft Active Accessibility是基于组件对象模型(COM)的技术,可改进可访问性辅助在Microsoft Windows上运行的应用程序工作的方式。它提供了整合到操作系统中的动态链接库,以及COM接口和API元素,它们提供了用于公开有关UI元素的信息的可靠方法。

在除我创建的功能区之外的任何其他功能区上单击鼠标(例如,单击“主页”选项卡中的加粗按钮。

您可以使用CommandBars.ExecuteMso方法执行由idMso参数标识的控制。在没有特定命令的对象模型的情况下,此方法很有用。适用于内置buttonstoggleButtonssplitButtons的控件。失败时,它将为无效的idMso返回E_InvalidArg,对于未启用或不可见的控件返回E_Fail。

Application.CommandBars.ExecuteMso("Copy")

0
投票

可访问性API(如Eugene所述)几乎是驱动Outlook功能区及其控件的唯一方法。

如果使用赎回是一个选项,它将公开SafeExplorer和SafeInspector对象,这些对象使用辅助功能和低级Windows API公开功能区及其控件。

Redemption.SafeExplorer sExplorer = new Redemption.SafeExplorer();
sExplorer.Item = OutlookApplication.ActiveExplorer;
foreach (var tab in sExplorer.Ribbon.Tabs)
{
  MessageBox.Show(tab);
}
© www.soinside.com 2019 - 2024. All rights reserved.