阻止默认发送按钮功能并仅在Outlook中执行自定义操作

时间:2012-05-25 11:30:36

标签: c# .net vsto outlook-addin

目标:在ADD-IN中,我需要阻止日历通知发送给与会者,但同时我想在单击发送按钮时执行一些自定义操作。总之我需要只执行自定义操作使用发送按钮而不是SEND按钮的默认功能。

我使用的是VSTO2010,MS Office 2007,.net 4。

我需要在2003,2007,2010女士办公室(2007年和2010年的支持就够了)。

2 个答案:

答案 0 :(得分:2)

您需要截取OnClick上“发送”按钮的CommandBar事件。是的,即使Outlook 2010使用功能区并且未显示任何命令栏,仍然存在包含按钮的程序化CommandBar。为了兼容性,功能区按钮仍会导致相应的CommandBarButton对象引发事件。

为了增加复杂性,在“约会”变成“会议”之后,您想要的按钮才会存在。

你需要一些字段:

private CommandBars mCommandBars;
private CommandBarButton mCommandButtonSendMeeting;

NewInspector事件中,添加以下行

mCommandBars = this.Inspector.CommandBars;
mCommandBars.OnUpdate += CommandBars_OnUpdate;

别处

private void CommandBars_OnUpdate()
{
    if (mCommandButtonSendMeeting == null)
    {
        mCommandButtonSendMeeting = (CommandBarButton)CommandBars.FindControl(Missing.Value, 2617, Missing.Value, Missing.Value);
        mCommandButtonSendMeeting.Click += CommandButtonSendMeeting_Click;
    }
}

private void CommandButtonSendMeeting_Click(CommandBarButton Ctrl, ref bool CancelDefault)
{
    CancelDefault = true;
    // Do whatever here.
}

答案 1 :(得分:0)

这里有一个不同的解决方案。你真的不需要触摸按钮,这与按钮无关。您必须使用Outlook为此目的提供的事件。只需在Add-in_StartUp中包含此行:

Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);  

当然,事件处理程序的实现:

void Application_ItemSend(object Item, ref bool Cancel)
{
    MessageBox.Show("Yihha!!");
    Cancel = true;
}

这将拦截您发送的任何邮件。适用于Outlook 2010。