我正在Visual Studio 2010中构建一个Outlook加载项,使用VSTO和VB.net。
目前我正在处理邮件和邮寄物品。有没有办法确定当前是否显示邮件项目或邮件项目?
我想要做的就是关闭所有显示的(打开的)项目(如果有的话),然后再将它们从当前文件夹移动到另一个文件夹。
我已经搜索了很多,但我无法找到问题的答案。
提前谢谢。
答案 0 :(得分:1)
您只需检查MailItem.EntryID
属性,查看Application.Inspectors
集合中是否存在邮件项,并且Inspector.CurrentItem
与EntryID
相关联,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}}
答案 1 :(得分:1)
我到目前为止找到的唯一解决方案是循环遍历Application.Inspectors
(记住它是一个基于1的集合,而不是基于0)并查看是否有任何检查员有CurrentItem
等于你的邮件。
您无法使用MailItem.GetInspector
,因为如果邮件项目已经存在,它将为邮件项目创建一个检查器窗口。
希望有人能够提供更好的解决方案,如果存在的话!
答案 2 :(得分:0)
循环遍历Application.Inspectoes集合中的检查器,为每个检查器读取CurrentItem属性(它可以返回不同类型的对象,例如MailItem,ContactItem等)。读取EntryID属性,并使用Namespace.CompareEntryIDs将其与相关项的条目ID进行比较。