以前曾经问过这个问题,但是凭借我所看到的方法,我无法得到我想要发生的事情。目前,我有一个Windows窗体,如果我运行.EXE(并调出窗体本身),我可以将Outlook中的电子邮件放入其中没问题。但是,我正在寻找的是当用户将消息直接从Outlook丢弃到.EXE文件上的图标时具有此功能。如果我在本地保存文件并将其放到图标上,我可以做得很好,但直接从Outlook中,我得到一个带有一条直线的圆圈。是否有我需要在应用程序上设置的属性才能使其正常工作。我使用此代码将消息放到窗体窗口上以便工作。
http://www.codeproject.com/Articles/28209/Outlook-Drag-and-Drop-in-C
这是我写的代码,它放在了Icon上。
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var form = new Form1();
if (args.Length > 0)
{
form.ProcessCommandLine(args[0]);
}
Application.Run(form);
}
}
public void ProcessCommandLine(string commandLine)
{
lstFiles.Items.Clear();
var fileAttributes = File.GetAttributes(commandLine);
if (fileAttributes.HasFlag(FileAttributes.Directory))
{
ProcessDirectory(commandLine);
}
else
{
ProcessFile(commandLine);
}
}
任何帮助将不胜感激,谢谢。
答案 0 :(得分:3)
您正在寻找创建Shell Drop Handler。正如您所发现的,.EXE文件的默认删除处理程序接受任何文件作为可放置项,并自动启动具有删除文件路径的应用程序。 Windows资源管理器不直接支持其他项目,例如直接从Outlook拖动的邮件或日历对象。 Windows附带的丢弃处理程序的一个示例是,如果将文件拖到ZIP文件上,则在删除时会自动将该文件添加到ZIP存档中。
如果您仍想创建自己的放置处理程序,则可以在任何文件上删除任何放置的项目时执行任何自定义操作(例如程序的图标,快捷方式等)。这不是通常不建议使用托管代码(C#或VB)编写shell扩展。 (见:http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx)
创建掉落处理程序后,它分为两步:
有关如何在ATL / C ++中创建Drop Handler的示例代码,请查看Microsoft All-In-One code framework,特别是类ATLShellExtDragAndDropHandler.cpp
替代解决方案:
考虑创建一个执行类似功能的Windows桌面小工具。编码应该更简单,因为你不必深入研究C ++。曾经有一个名为魔术文件夹的Vista小工具接受了作为放置目标的项目,但我无法再在Windows库中找到它。这是一篇描述它是如何工作的文章:
http://www.howtogeek.com/howto/windows-vista/keep-your-vista-desktop-clean-with-the-magic-folder/
这是一个指向作者的链接(如果你问得很好,也许他会分享源代码):http://davecra.wordpress.com/