Outlook超链接上下文菜单

时间:2015-02-13 21:36:30

标签: visual-studio-2010 c#-4.0 outlook-addin outlook-2013

我正在尝试为超链接创建上下文菜单。似乎有几个上下文可以拦截超链接事件 - 目前我对idMso =“ContextMenuReadOnlyMailHyperlink”的上下文菜单感兴趣。

有两种不同的方法可以执行此菜单中新按钮的回调 - 如果在Outlook的预览窗格中右键单击了超链接,或者打开了一个电子邮件以便在自己的窗口中进行阅读。

从预览窗格调用时,我的回调会收到一个Explorer COM对象。我假设Explorer的ActiveInlineResponseWordEditor属性将以某种方式包含我选择的超链接,但它会抛出一个无用的COM异常(“操作失败”)。

如何从此上下文中找到所选的超链接?

另外,Inspector COM对象如何(在自己的窗口中从电子邮件中右键单击超链接时)?

2 个答案:

答案 0 :(得分:1)

我有类似的问题,我的解决方案看起来像:

public void OnCustomHyperlinkMenuClick(IRibbonControl control)
{
    Explorer explorer = control.Context as Explorer;
    if (explorer != null)
    {
        Document document = explorer.ActiveInlineResponseWordEditor;
        //Note from asker: above line throws a COM Exception ("The operation failed")

        if (document != null && document.Windows != null && document.Windows.Count > 0)
        {
            Microsoft.Office.Interop.Word.Selection selection = document.Windows[1].Selection;
            if (selection != null && selection.Hyperlinks != null && selection.Hyperlinks.Count > 0)
            {
                Hyperlink hyperlink = selection.Hyperlinks[1];
                string hyperlinkUrl = hyperlink.Address;
                DoSomethingWithUrl(hyperlinkUrl);
            }
        }
    }
}

您需要在项目中添加对单词interop程序集“Microsoft.Office.Interop.Word.dll”的引用。

答案 1 :(得分:1)

  

我假设Explorer的ActiveInlineResponseWordEditor属性会以某种方式包含我选择的超链接,但它会抛出一个无用的COM异常(“操作失败”)。

未激活InlineResponse时,无法使用ActiveInlineResponseWordEditor属性。当用户执行导致内联响应出现在阅读窗格中的操作时,将触发Explorer类的InlineResponse事件。在您的情况下,内联响应未激活。

  

如何从此上下文中找到所选的超链接?

Explorer类提供Selection属性,该属性返回一个Selection对象,该对象包含在资源管理器窗口中选择的一个或多个项目。您可以使用Item方法(由C#中的索引器表示)从选择中获取Microsoft Outlook项目或对话标题。然后尝试将其强制转换为MailItem类并获取Inspector对象,请参阅MailItem类的GetInspector方法。 Inspector类提供WordEditor属性,该属性返回正在显示的消息的Microsoft Word文档对象模型。您可以使用Word对象模型来进行选择。

相关问题