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

问题描述:

Outlook 2010 Addin Visual Studio(C#)中。VSTO C# - Outlook Addin - 如何区分.AttachmentSelections对象

我试图找到一种方法,能够告诉从资源管理器中检索到的.AttachmentSelection(当只是在收件箱中预览邮件时)和从Inspector中检索到的.AttachmentSelection(当双击并实际打开邮件时一个单独的窗口),当右键单击在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"); 
    } 
} 

但是,一旦第一个“如果”是有效的,内部的人都失败。因为上下文不是Outlook Inspector,也不是Outlook Explorer。 微软的样本和解释并不是非常有用,因为在他们的代码片段中,他们只是在消息框附件中没有更深入地验证它们的来源(explorer \ inspector)。

我的需求是抓住Mailitem,用户右键单击附件,并从中提取信息,而不是直接附加附件。

有什么想法吗?任何人 ?

您可以使用应用程序类的ActiveWindow方法来确定附件是否是从浏览器或检查窗口中打开。该方法返回一个代表桌面上当前Microsoft Outlook窗口的对象,可以是Explorer或Inspector对象。如果未打开Outlook资源管理器或检查器,则返回Nothing。

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

怎么样?直接从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"; 
      } 

    } 
+0

嘿,感谢您的评论,但这并没有太大的帮助,如上所示,接收Outlook.AttachmentSelection它不能被铸造到邮件项目。 – Stavm 2015-02-08 16:19:47