C# 阻止默认发送按钮功能并在outlook中仅执行自定义操作
目标:在外接程序中,我需要阻止向与会者发送日历通知,但同时我希望在单击“发送”按钮时执行一些自定义操作。。简而言之,我只需要执行与send按钮关联的自定义操作,而不是send按钮的默认功能 我正在使用VSTO2010、MS Office 2007、.net 4C# 阻止默认发送按钮功能并在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使用功能区并且不显示任何命令栏,但仍然有一个包含按钮
我需要在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上工作