我正在Visual Studio 2010中使用VSTO和VB.net構建Outlook加載項。如何確定是否顯示Outlook項目
現在我正在處理郵件和郵寄物品。有沒有辦法確定當前是顯示郵件還是郵件?
我想要做的就是關閉所有顯示的(打開的)項目(如果有的話),然後再將它們從當前文件夾移到另一個文件夾。
我已經GOOGLE了很多,但我找不到我的問題的答案。
預先感謝您。
我正在Visual Studio 2010中使用VSTO和VB.net構建Outlook加載項。如何確定是否顯示Outlook項目
現在我正在處理郵件和郵寄物品。有沒有辦法確定當前是顯示郵件還是郵件?
我想要做的就是關閉所有顯示的(打開的)項目(如果有的話),然後再將它們從當前文件夾移到另一個文件夾。
我已經GOOGLE了很多,但我找不到我的問題的答案。
預先感謝您。
你只需要檢查MailItem.EntryID
屬性,查看是否存在的Application.Inspectors
集合中的郵件項目,並具有關聯與同EntryID
的Inspector.CurrentItem
。以下是我過去使用過的有用的幫手方法。
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;
}
我到目前爲止發現的唯一的解決辦法是遍歷Application.Inspectors
(記住它不是0,基於基於1的集合),並看看是否有任何督察有CurrentItem
等於你的郵件項目。
您不能使用MailItem.GetInspector
,因爲如果郵件項目不存在,它將爲郵件項目創建檢查器窗口。
希望有人能夠提供更好的解決方案,如果有的話!
循環遍歷Application.Inspectoes集合中的檢查器,爲每個檢查器讀取CurrentItem屬性(它可以返回不同類型的對象,例如MailItem,ContactItem等)。閱讀EntryID屬性並使用Namespace.CompareEntryIDs將其與所討論項目的條目ID進行比較。
不幸的是,這是不正確的。如果郵件項目還沒有,那麼'mailItem.GetInspector'調用將創建並顯示一個新的檢查器。資料來源:http://msdn.microsoft.com/en-us/library/office/ff868098(v=office.15).aspx – HughHughTeotl
@HughHughTeotl - 非常棒!我更新了方法以反映這一點。這也造成了我們的問題,因爲'GetInspector'創建'Inspector'而不是檢查它是否存在。繼@Dmitry和你的建議妥善解決。 – SliverNinja