如何确定是否显示Outlook项目

时间:2012-05-17 05:20:36

标签: email post outlook vsto

我正在Visual Studio 2010中构建一个Outlook加载项,使用VSTO和VB.net。

目前我正在处理邮件和邮寄物品。有没有办法确定当前是否显示邮件项目或邮件项目?

我想要做的就是关闭所有显示的(打开的)项目(如果有的话),然后再将它们从当前文件夹移动到另一个文件夹。

我已经搜索了很多,但我无法找到问题的答案。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

您只需检查MailItem.EntryID属性,查看Application.Inspectors集合中是否存在邮件项,并且Inspector.CurrentItemEntryID相关联,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; } 。下面是我过去使用过的有用辅助方法。

注意:此技术doesn't work for new messages (composing) since new mail items don't contain an EntryID until they are saved/sent

{{1}}

答案 1 :(得分:1)

我到目前为止找到的唯一解决方案是循环遍历Application.Inspectors(记住它是一个基于1的集合,而不是基于0)并查看是否有任何检查员有CurrentItem等于你的邮件。

您无法使用MailItem.GetInspector,因为如果邮件项目已经存在,它将为邮件项目创建一个检查器窗口。

希望有人能够提供更好的解决方案,如果存在的话!

答案 2 :(得分:0)

循环遍历Application.Inspectoes集合中的检查器,为每个检查器读取CurrentItem属性(它可以返回不同类型的对象,例如MailItem,ContactItem等)。读取EntryID属性,并使用Namespace.CompareEntryIDs将其与相关项的条目ID进行比较。

相关问题