如何以编程方式控制Outlook加载项?

时间:2014-09-08 08:29:28

标签: c# vsto outlook-addin

我下载了一个outlook加载项,安装后在功能区上创建新选项卡,并在新选项卡上创建按钮。我想在没有ui交互的情况下按下这些按钮。 我尝试查询已安装的加载项,但无法控制:

    static void Main( string[] args )
    {
        Microsoft.Office.Interop.Outlook.ApplicationClass app = new Microsoft.Office.Interop.Outlook.ApplicationClass();
        for ( int c = 1; c < app.COMAddIns.Count; c++ )
        {
            Console.WriteLine( app.COMAddIns.Item( c ).Description );
            if ( app.COMAddIns.Item( c ).Description.StartsWith( "XXX" ) )
            {
                string guid = app.COMAddIns.Item( c ).Guid; // Okay
                object obj = app.COMAddIns.Item( c ).Object; // null
                object parent = app.COMAddIns.Item( c ).Parent; // ApplicaionClass
                string progId = app.COMAddIns.Item( c ).ProgId; // Okay
            }
        }
    }

但这是可能的,错误的方式。可以查询功能区控件的按钮吗?

2 个答案:

答案 0 :(得分:0)

你不能。

丝带中按钮的动作不公开。当您在同一个加载项中时,甚至无法以编程方式在按钮本身上调用click事件。 (您可以调用事件处理程序,但这只是所有.NET端而不会干扰VSTO / Outlook。

答案 1 :(得分:0)

没有为程序访问公开Office功能区控件。

您可以使用UI Automation API或者您可以使用Redemption及其SafeRibbon对象(由SafeExplorer .Flan属性公开) - 它允许枚举和执行Outlook功能区控件:< / p>

 set sInspector = CreateObject("Redemption.SafeInspector")
 sInspector.Item = Application.ActiveInspector
 set Ribbon = sInspector.Ribbon
 oldActiveTab = Ribbon.ActiveTab 'remember the currently selected tab
 Ribbon.ActiveTab = "Task"
 set Control = Ribbon.Controls("Assign Task")
 Control.Execute
 Ribbon.ActiveTab = oldActiveTab 'restore the active tab