2012-05-17 67 views
2

我正在Visual Studio 2010中使用VSTO和VB.net構建Outlook加載項。如何確定是否顯示Outlook項目

現在我正在處理郵件和郵寄物品。有沒有辦法確定當前是顯示郵件還是郵件?

我想要做的就是關閉所有顯示的(打開的)項目(如果有的話),然後再將它們從當前文件夾移到另一個文件夾。

我已經GOOGLE了很多,但我找不到我的問題的答案。

預先感謝您。

回答

1

你只需要檢查MailItem.EntryID屬性,查看是否存在的Application.Inspectors集合中的郵件項目,並具有關聯與同EntryIDInspector.CurrentItem。以下是我過去使用過的有用的幫手方法。

說明:該技術doesn't work for new messages (composing) since new mail items don't contain an EntryID until they are saved/sent

internal static bool HasInspector(Outlook.MailItem mailItem) 
{ 
    bool HasInspector = false; 
    try { 
     if (mailItem == null || string.IsNullOrEmpty(mailItem.EntryID)) return HasInspector; // short-circuit invalid params or new mail message (no entryid since it's not saved) 
     foreach (Outlook.Inspector inspector in Globals.ThisAddIn.Application.Inspectors) 
     { 
      Outlook.MailItem currentMailItem = inspector.CurrentItem as Outlook.MailItem; 
      if (currentMailItem != null && !string.IsNullOrEmpty(currentMailItem.EntryID)) 
      { 
       HasInspector = Globals.ThisAddIn.Application.Session.CompareEntryIDs(currentMailItem.EntryID, mailItem.EntryID); 
       Marshal.ReleaseComObject(currentMailItem); currentMailItem = null; // resource RCW cleanup 
      } 
     }   
    } 
    catch { } // attempt to request inspector for mailitem 
    return HasInspector; 
} 
+1

不幸的是,這是不正確的。如果郵件項目還沒有,那麼'mailItem.GetInspector'調用將創建並顯示一個新的檢查器。資料來源:http://msdn.microsoft.com/en-us/library/office/ff868098(v=office.15).aspx – HughHughTeotl

+0

@HughHughTeotl - 非常棒!我更新了方法以反映這一點。這也造成了我們的問題,因爲'GetInspector'創建'Inspector'而不是檢查它是否存在。繼@Dmitry和你的建議妥善解決。 – SliverNinja

1

我到目前爲止發現的唯一的解決辦法是遍歷Application.Inspectors(記住它不是0,基於基於1的集合),並看看是否有任何督察有CurrentItem等於你的郵件項目。

您不能使用MailItem.GetInspector,因爲如果郵件項目不存在,它將爲郵件項目創建檢查器窗口。

希望有人能夠提供更好的解決方案,如果有的話!

0

循環遍歷Application.Inspectoes集合中的檢查器,爲每個檢查器讀取CurrentItem屬性(它可以返回不同類型的對象,例如MailItem,ContactItem等)。閱讀EntryID屬性並使用Namespace.CompareEntryIDs將其與所討論項目的條目ID進行比較。

相關問題