我的VSTO Outlook应用程序出现问题。我要处理选定电子邮件中的电子邮件正文。 对于不在“默认”列表中的选定电子邮件,此代码可以正常工作:
Object selItem = Globals.ThisAddIn.Application.ActiveExplorer().Selection[1];
Outlook.MailItem mailItem = (Outlook.MailItem)selItem;
return mailItem.Body;
但是,如果用户双击打开列表中的电子邮件,则该电子邮件将显示在新窗口中。如果在此窗口(功能区上方)执行插件,则仍使用列表中的电子邮件(现在位于后台)。
是否有办法找出插件是否在单独的窗口中启动,然后从中获取电子邮件正文?
关于, 弗洛里安
答案 0 :(得分:0)
当您双击电子邮件项目时,将打开一个检查器窗口,您可以使用Application.ActiveInspector()
方法来访问它。 Inspector
对象具有CurrentItem
属性,该属性代表打开的项目。
另外,应该避免在表达式中使用多个点,并正确释放COM对象。
答案 1 :(得分:0)
巧合的是,我只是处理了类似的事情。我的情况不尽相同,但是由于我可以轻松地拼凑出您正在寻找的外观,请参见下文。我尚未对此进行测试,显然您必须处理将正确的引用传递给Outlook应用程序的问题,但是由于我可以立即获得此引用,所以我认为它将通过它,并希望对您有所帮助。 / p>
private static void ribbonButton_Click(object sender, RibbonControlEventArgs e)
{
Outlook.Application application = new Outlook.Application();
Outlook.Inspector inspector = application.ActiveInspector();
if (application.ActiveExplorer().Selection[1] is Outlook.MailItem explorerMailItem)
{
// Write code to handle message if sourced from explorer (i.e., Reading Pane)
}
else if (inspector.CurrentItem is Outlook.MailItem inspectorMailItem)
{
// Write code to hanlde message if sourced from inspector
// (i.e., openened (double-clicked) message
}
}