【问题标题】:Programmatically get the list of the ribbons using VSTO add-in使用 VSTO 加载项以编程方式获取功能区列表
【发布时间】:2022-05-01 11:22:46
【问题描述】:

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

我想知道两件事。

  1. 如何获取所有功能区的名称(Home、Insert、Design、 ....) 以编程方式?
  2. 在除我创建的功能区之外的任何其他功能区上单击鼠标(例如单击“主页”选项卡中的粗体按钮)。

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

【问题讨论】:

    标签: c# visual-studio vsto programmatically


    【解决方案1】:

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

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

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

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

    Application.CommandBars.ExecuteMso("Copy")
    

    【讨论】:

    • 谢谢。我的项目是一个可访问的应用程序,我将尝试使用 COM。互操作也可以吗?因为有人建议你可以用互操作做所有事情,但我还没有找到解决方案。
    • 您的意思是Explorer.CommandBarsApplication 对象不公开 CommandBars 属性 - Application.ActiveExplorer.CommandBars
    • 是的,可以使用 Office 互操作。该方法是 Outlook 对象模型的一部分。正如 Dmitry 所写,您可以使用 ExplorerInspector 类的 CommandBars 属性。
    • 嗨,“Application.CommandBars.ExecuteMso("Copy")”是一个 VBA 代码。如何在我的 C# VSTO 应用程序中使用它?不明白的地方见谅,我对visual studio有一点经验。
    • 这是一个 C# VSTO 等价物 Application.CommandBars.ExecuteMso("Copy");
    【解决方案2】:

    Accessibility API(正如 Eugene 提到的)几乎是驱动 Outlook Ribbon 及其控件的唯一方法。请记住,由于 Microsoft 从未记录控件及其 ID,因此它们可能会在版本之间发生变化。

    如果使用Redemption(我是它的作者)是一个选项,它会公开SafeExplorerSafeInspector 对象,这些对象使用辅助功能和低级Windows API 公开功能区及其控件。

    Redemption.SafeExplorer sExplorer = new Redemption.SafeExplorer();
    sExplorer.Item = OutlookApplication.ActiveExplorer;
    foreach (var tab in sExplorer.Ribbon.Tabs)
    {
      MessageBox.Show(tab);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2015-03-05
      • 2022-01-22
      • 2021-03-01
      相关资源
      最近更新 更多