C# 访问Outlook阅读窗格中正在编辑的文档

C# 访问Outlook阅读窗格中正在编辑的文档,c#,outlook,outlook-addin,C#,Outlook,Outlook Addin,我编写了一个简单的VSTO插件,当用户单击功能区栏按钮时,它会将超链接插入电子邮件中。下面是一个代码示例: private void按钮1\u单击(对象发送者,RibbonControlEventArgs e) { var context=e.Control.context作为检查器; if(上下文!=null) { if(context.IsWordMail()) { var doc=context.WordEditor作为文档; 如果(doc!=null) { var sel=doc.Win

我编写了一个简单的VSTO插件,当用户单击功能区栏按钮时,它会将超链接插入电子邮件中。下面是一个代码示例:

private void按钮1\u单击(对象发送者,RibbonControlEventArgs e)
{
var context=e.Control.context作为检查器;
if(上下文!=null)
{
if(context.IsWordMail())
{
var doc=context.WordEditor作为文档;
如果(doc!=null)
{
var sel=doc.Windows[1]。选择;
文档超链接添加(选择范围,“http://www.google.com“,”,“,”谷歌“,”);
}
}
}
else if(e.Control.Context是资源管理器)
{
Explorer Explorer=Globals.ThisAddIn.Application.ActiveExplorer();
如果(explorer.Selection.Count==1)
{
Microsoft.Office.Interop.Outlook.Selection itemSelection=explorer.Selection;
var item=itemSelection[1]作为MailItem;
//在阅读窗格中获取WordEditor的实例?
}
}
}
当在单独的窗口中编辑电子邮件时(
e.Control.Context为Inspector
),这种方法很有效

如果消息正在回复/转发,并且阅读窗格已打开,则编辑器将在阅读窗格中内联显示(
e.Control.Context为Explorer

在这种情况下,我不知道如何获取
文档的实例。我可以访问资源管理器中选定的项目,但我无法确定如何访问阅读窗格中显示的文档编辑器

如果我将编辑器“弹出”到一个单独的窗口,它工作正常(上下文更改为Inspector)

有没有办法访问直接在阅读窗格中编辑的电子邮件文档


在那个为我指明正确方向的人的大力帮助下,我发现在Explorer类中有一个属性:
Explorer.ActiveInlineResponseWordEditor
,它为您提供以内联方式显示的编辑器

  • 您可以调用MailItem.GetInspector,然后调用Inspector.WordEditor。这在较新版本的Outlook中应该可以正常工作

  • 您可以在中使用对象-它应该适用于所有版本的Outlook,并公开SafeExplorer.ReadingPane属性(对象)


  • 我尝试了第一种方法,但我得到了一个例外:内存不足。经过一点实验,我发现,虽然编辑器嵌入在主窗口中,但不可能对文档进行操作,而且只要我“弹出”窗口,相同的代码就可以工作。例如:
    Document.parations[1].Range.Delete()
    正在引发以下COMException:此方法或属性不可用,因为文档已锁定以进行编辑。在单独的窗口中,它正确地删除了第一段。这是真的,但当我点击“回复”时,编辑器直接显示在阅读窗格中,并且该编辑器显然不是只读的。如果我对MailItem.GetInspector().WordEditor获取的文档调用Document.Unprotect(),则不会再引发异常,但文本在尝试操作它时也不会更改,因此它必须是在读取中显示的不同编辑器实例(编辑?)我还尝试了方法2,通过使用您的赎回库获得了
    SafeExplorer.ReadingPane.WordEditor
    ,效果很好,所以我想方法2是对我问题的回答。我希望微软首先决定在自己的产品中公开ReadingPane:)。感谢您的帮助。但是您没有处理您编辑的新邮件-它位于草稿文件夹中。您回复的旧邮件位于Explorer.Selection集合中,但未对其进行编辑。如果需要新的内联消息,则需要使用Explorer.InlineResponse/InlineResponseClose事件。或者你也可以使用SafeExplorer Redemption对象——它使用Windows API查找嵌入式word编辑器,无论编辑时发生什么。啊,谢谢!InlineResponse可能是我要找的。看看,这个功能是在Outlook 2013中添加的,但我的项目是针对Office 2010的,因为目前我们有一个2010/2013版本的混合环境,我想为这两个版本都添加一个插件。