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

C# 阻止默认发送按钮功能并在outlook中仅执行自定义操作,c#,.net,vsto,outlook-addin,C#,.net,Vsto,Outlook Addin,目标:在外接程序中,我需要阻止向与会者发送日历通知,但同时我希望在单击“发送”按钮时执行一些自定义操作。。简而言之,我只需要执行与send按钮关联的自定义操作,而不是send按钮的默认功能 我正在使用VSTO2010、MS Office 2007、.net 4 我需要在Ms office 200320072010上进行此操作(对2007和2010的支持就足够了)。您需要截获命令栏上发送按钮的OnClick事件。是的,尽管Outlook 2010使用功能区并且不显示任何命令栏,但仍然有一个包含按钮

目标:在外接程序中,我需要阻止向与会者发送日历通知,但同时我希望在单击“发送”按钮时执行一些自定义操作。。简而言之,我只需要执行与send按钮关联的自定义操作,而不是send按钮的默认功能

我正在使用VSTO2010、MS Office 2007、.net 4


我需要在Ms office 200320072010上进行此操作(对2007和2010的支持就足够了)。

您需要截获
命令栏上发送按钮的
OnClick
事件。是的,尽管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.
}

这里有一个不同的解决方案。你真的不必触摸按钮,与按钮无关。您必须使用Outlook为此目的提供的事件。只需将此行包括在外接程序启动中:

Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);  
当然,事件处理程序的实现:

void Application_ItemSend(object Item, ref bool Cancel)
{
    MessageBox.Show("Yihha!!");
    Cancel = true;
}
这将拦截您发送的任何消息。在Outlook 2010上工作