背景:
我正在设计一个允许将项目拖到它上面的应用程序,并将调用它们上的一些长时间运行的进程。这些项目通常会从文件系统和Outlook中拖入。我关心的是后者。
如何挂钩到Outlook以查明是否已将某条消息(或多条消息)拖出我的应用程序以及消息ID是什么?
据我所知,Outlook对象模型没有这样的拖放事件,一个解决方案是收听Windows messages - 这在团队中是不可行的,因为我们的组合Interop知识不是很好。< / p>
我们将在Visual Studio 2010中使用C#4.0来开发此应用程序。
答案 0 :(得分:3)
即使这是一个老问题,实际上还有一种方法。它没有记录,但我能够至少在一半的时间内对此进行逆向工程。我不确定“选择”方法是否仍然更清晰,但我更喜欢直接读取数据。
可以在此处找到示例和文档: https://github.com/yasoonOfficial/outlook-dndprotocol
答案 1 :(得分:1)
您无法通过通用MailItem.EntryID
拖放界面直接从Outlook访问IDataObject
。如果您只想访问MSG数据,则可以使用this CodeProject example。将MSG复制到磁盘(或剪贴板,拖放等等)后,它将丢失对EntryID
的任何引用。
我知道访问EntryID
的唯一方法是使用VSTO并使用ActiveExplorer().Selection
查看放弃操作时选择的项目。在拖放命令期间Here is an example of accessing the Body of a selected message。一旦看到正在使用的一般模式,您应该能够找到许多示例。