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

本文关键字:Outlook 执行 操作 自定义 默认 功能 按钮 | 更新日期: 2023-09-27 18:35:24

目标:在加载项中,我需要阻止将日历通知发送给与会者,但同时我想在单击发送按钮时执行一些自定义操作。简而言之,我只需要执行与发送按钮关联的自定义操作,而不是发送按钮的默认功能。

我正在使用VSTO2010,MS Office 2007,.NET 4。

我需要在 Mss office 2003、2007、2010

上这样做(支持 2007 和 2010 就足够了)。

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

您需要

拦截CommandBar上发送按钮的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 提供的事件来实现这些目的。只需在加载项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。