VSTO C# - Outlook 插件 - 如何区分 .AttachmentSelections 对象

VSTO C# - Outlook Addin - How to differ between .AttachmentSelections objects

Visual studio (C#) 中的 Outlook 2010 插件。

我正在尝试找到一种方法来区分从 Explorer 检索到的 .AttachmentSelection(当只是在收件箱中预览邮件项目时)和从 Inspector 检索到的 .AttachmentSelection(当双击并实际打开邮件时)在单独的 window) 中,在 Outlook 中右键单击附件本身时

我正在尝试做类似的事情:

public void ButtonClick(Office.IRibbonControl control)
{
    //right clicked attachment item -> context menu
    if (control.Context is Outlook.AttachmentSelection)
    {
        if (control.Context is Outlook.Inspector)
            MessageBox.Show("inspector");
        else if (control.Context is Outlook.Explorer)
            MessageBox.Show("explorer");
     }
}

但是一旦第一个 'if' 有效,内部的都失败了。因为上下文不是 Outlook 检查器,也不是 Outlook 资源管理器。 Microsoft 示例和解释不是很有帮助,因为在他们的代码片段中,他们只是将附件消息框化,而没有深入验证其来源 (explorer\inspector)。

我需要抓取 Mailitem,用户从中右键单击附件,然后从中提取信息,而不是直接处理附件。

有什么想法吗?有人吗?

怎么样?直接来自 msdn

Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
if (mailItem != null)
      {
          if (mailItem.EntryID == null)
          {
              mailItem.Subject = "This text was added by using code";
              mailItem.Body = "This text was added by using code";
          }

    }

您可以使用应用程序 class 的 ActiveWindow 方法来确定附件是从资源管理器还是检查器 window 打开的。方法 returns 表示桌面上当前 Microsoft Outlook window 的对象,可以是资源管理器或检查器对象。 Returns 如果没有打开 Outlook 资源管理器或检查器,则无。

此外,您可能会发现 Outlook 项目的 BeforeAttachmentPreview 事件很有帮助。它在预览与父对象实例关联的附件之前触发。 IE。该事件在预览附件之前触发,可以从活动资源管理器的阅读窗格中的附件条或活动检查器中预览。请注意,您可以取消操作。您只需将 cancel 参数设置为 true 即可。