从Outlook窗口拖放到.Net中的Application.EXE文件(或图标)
本文关键字:文件 EXE 图标 Application 中的 窗口 Outlook 拖放 Net | 更新日期: 2023-09-27 18:27:00
以前有人问过这个问题,但用我看到的方法,我无法得到我想要的结果。目前,我有一个Windows窗体,如果我运行.EXE(并打开窗体本身),我可以将outlook中的电子邮件放入其中,没有问题。但是,当用户将邮件直接从Outlook拖到.EXE文件上的图标时,我想要的是具有此功能。如果我在本地保存文件并将其放在图标上,我可以做到这一点,但直接从Outlook中,我会得到一个带直线的圆圈。我需要在应用程序上设置一个属性才能实现这一点吗。我用这段代码让将消息放到表单窗口上的操作开始了。
http://www.codeproject.com/Articles/28209/Outlook-Drag-and-Drop-in-C
这是我写的代码,它会掉到图标上。
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);
}
}
任何帮助都将不胜感激,谢谢。
您希望创建一个Shell Drop Handler。正如您所发现的,.EXE文件的默认丢弃处理程序接受任何文件作为可丢弃项,并自动启动带有已丢弃文件路径的应用程序。Windows资源管理器不直接支持其他项目,例如直接从Outlook拖动的邮件或日历对象。Windows附带的拖放处理程序的一个示例是,如果您将文件拖到ZIP文件上,它会在您拖放时自动将该文件添加到ZIP存档中。
如果您仍然想创建自己的放置处理程序,则可以在任何文件(如程序的图标、快捷方式等)上放置任何已放置项目时执行任何自定义操作。这不是一项简单的任务,通常不建议使用托管代码(C#或VB)编写shell扩展。(请参见:http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx)
一旦你创建了你的投递处理程序,这是一个分两步的过程:
- 在程序安装过程中,请在桌面上创建一个具有唯一文件扩展名的文件(如.myprogdroptarget)
- 为.myprogdroptarget注册放置处理程序,使此图标成为对象的"神奇"放置目标
有关如何在ATL/C++中创建Drop Handler的一些示例代码,请查看Microsoft All-in-One代码框架,特别是类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/