我下载了一个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
}
}
}
但这是可能的,错误的方式。可以查询功能区控件的按钮吗?
答案 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