我有一个使用VSTO的Outlook 2010插件,可以在将附件添加到邮件项目之前对其进行转换。我完成此任务的方法是在插件启动中注册新的检查器事件
inspectors = Application.Inspectors;
inspectors.NewInspector += new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(OnNewInspector);
然后在新的检查器事件处理程序中,检查邮件项并注册BeforeAttachmentAdd事件。然后在BeforeAttachmentAdd中,我对附件数据执行转换。
从Outlook中撰写邮件时,这一切都很有效。
我试图解决的问题是当用户尝试"作为附件发送"直接从另一个Office应用程序(例如,当前正在Word中编辑的文档或Excel中的当前电子表格)。
在这种情况下,我的新检查器事件处理程序永远不会触发。将启动一个新的检查器窗口,其中已附加Office文档。我注意到,如果我注册了Application.ItemLoad事件,则当另一个应用程序执行"发送为附件"时会调用此事件,但如果对象项是MailItem并且我注册BeforeAttachmentAdd我的附件添加事件处理程序永远不会开火。
关于我的插件应该注册哪些事件的任何想法,以便它们可以在将这些Office附件发送到邮件项目之前对其进行转换?
答案 0 :(得分:4)
BeforeAttachmentAdd事件不会触发。但NewInspector对我来说很好 - 如果单击“应用程序”按钮,选择“检查器”属性,单击“浏览”,转到“事件”选项卡并查看选项卡底部的日志,您是否在OutlookSpy中看到了该事件?
由于NewInspector事件在项目已有附件时触发,为什么不立即运行附件代码呢?
<强>更新强>
抱歉,我错过了你从Word中这样做的事实。如果使用简单MAPI或mailto url,它使用简单MAPI和Outlook禁用基于Inspector的事件。唯一的解决方法是使用计时器定期扫描Application.Inspectors集合以检查新检查器是否打开。