从Outlook中的“高级查找”窗口拖动mailitem并放在Winforms上?

时间:2012-10-19 13:11:32

标签: winforms drag-and-drop outlook vsto mailitem

用于从Outlook拖动MailItem并删除寡妇表单的大多数代码示例都涉及对Outlook的ActiveExplorer窗口的引用...

这是an example

Dim objMI As Microsoft.Office.Interop.Outlook.MailItem

For Each objMI In objOL.ActiveExplorer.Selection()
    Dim strFile As String = _
                IO.Path.Combine("c:\temp", _
                                (objMI.Subject + ".msg").Replace(":", ""))
    lblFile.Text += strFile + Environment.NewLine
    objMI.SaveAs(strFile)
Next

...但是,如果从高级查找弹出窗口拖动,则会产生意外结果。

您的C#或VB代码会从主Outlook窗口中获取所选电子邮件,而不是您从“高级查找”电子邮件列表中实际选择的电子邮件。除非用户警觉,否则他甚至不会注意到他收到了错误的电子邮件。

有没有解决方案?

1 个答案:

答案 0 :(得分:0)

您可以确定它们是不是ActiveWindow()没有使用的活动资源管理器或检查器),然后利用IDataObject界面而不是ActiveExplorer.Selection()。对于我们的插件 - 我们只是选择不支持高级查找进行拖放操作,但这并不总是一种选择。

有关使用Win32 IDataObject - download this Code Project Outlook Drag-n-Drop example的示例。出于某种原因,Microsoft选择不在高级查找窗口周围公开VSTO界面包装器。 Office 2013中仍存在此问题。