我正在尝试为超链接创建上下文菜单。似乎有几个上下文可以拦截超链接事件 - 目前我对idMso =“ContextMenuReadOnlyMailHyperlink”的上下文菜单感兴趣。
有两种不同的方法可以执行此菜单中新按钮的回调 - 如果在Outlook的预览窗格中右键单击了超链接,或者打开了一个电子邮件以便在自己的窗口中进行阅读。
从预览窗格调用时,我的回调会收到一个Explorer COM对象。我假设Explorer的ActiveInlineResponseWordEditor属性将以某种方式包含我选择的超链接,但它会抛出一个无用的COM异常(“操作失败”)。
如何从此上下文中找到所选的超链接?
另外,Inspector COM对象如何(在自己的窗口中从电子邮件中右键单击超链接时)?
答案 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对象模型来进行选择。