【问题标题】:Drag and Drop from Outlook Window to Application .EXE file (or Icon) in .Net从 Outlook 窗口拖放到 .Net 中的应用程序 .EXE 文件(或图标)
【发布时间】:2012-03-05 17:20:48
【问题描述】:

以前有人问过这个问题,但是用我见过的方法,我无法得到我想要发生的事情。目前,我有一个 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);
        }
    }

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 拖放到 exe 将完全由资源管理器(或任何显示您的 exe)控制。与你自己的代码无关。
  • @adelphus 好的,那么是否有需要更改的设置?就像我说的那样,对于“文件”,它工作得很好,但是在图标上没有前景,没有骰子。感谢您的信息
  • 你误会了。 Explorer 将被编码为处理文件 - 您无法更改任何设置,因为在内部 Explorer 将不知道如何处理 Outlook 项目。对您来说,该项目可能看起来像一个文件,但对 Explorer 来说,它是完全不同的东西。我不相信您的问题有解决方案。
  • @adelphus 当您将邮件从 Outlook 拖放到桌面时,Explorer 是如何处理的?它会在此时为您写入一个 .msg 文件。你刚才说的这怎么可能。我认为资源管理器将能够通过命令行或通过拖放传递字节。再次感谢。
  • Explorer 将编写一个 .msg 文件,因为这是它对特定数据格式的编程。我认为您想要的是让资源管理器自动保存文件(这引出了在哪里的问题?)然后使用保存的文件启动您的应用程序。 Explorer 没有被编程来做这些事情。当您尝试将压缩文件夹中的文件拖放到 exe 上时,也会发生同样的情况。

标签: c# winforms drag-and-drop outlook icons


【解决方案1】:

您正在寻找创建Shell Drop Handler。正如您所发现的,.EXE 文件的默认放置处理程序接受任何文件作为可放置项,它会自动启动应用程序并使用放置文件的路径。 Windows Explorer 不直接支持其他项目,例如直接从 Outlook 拖动的邮件或日历对象。 Windows 中包含的放置处理程序的一个示例是,如果您将文件拖到 ZIP 文件上,它会在您放置时自动将该文件添加到 ZIP 存档中。

如果您仍想创建自己的放置处理程序,您可以在任何放置的项目被放置在任何文件上时执行任何自定义操作(例如程序的图标、快捷方式等)。这不是一项简单的任务,并且通常不建议从托管代码(C# 或 VB)编写 shell 扩展。 (见:http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx

创建放置处理程序后,这是一个两步过程:

  1. 在程序安装期间,在桌面上创建一个具有唯一文件扩展名的文件(例如 .myprogdroptarget)。
  2. 为 .myprogdroptarget 注册放置处理程序,以便此图标成为对象的“神奇”放置目标。

有关如何在 ATL/C++ 中创建 Drop Handler 的一些示例代码,请查看 Microsoft All-In-One code framework,特别是 ATLShellExtDragAndDropHandler.cpp

替代解决方案:

考虑创建一个执行类似功能的 Windows 桌面小工具。编码应该更简单,因为您不必深入研究 C++。曾经有一个名为 Magic Folder 的 Vista 小工具接受项目作为放置目标,但是我在 Windows 库中找不到它。这是一篇描述其工作原理的文章:

http://www.howtogeek.com/howto/windows-vista/keep-your-vista-desktop-clean-with-the-magic-folder/

这里是作者的链接(如果你问得好,也许他会分享源代码):http://davecra.wordpress.com/

【讨论】:

  • 第二种解决方案的唯一问题是我们有 90% 的用户通过带有 Citrix Desktop 的瘦客户端。我不确定小部件如何与该配置一起使用。谢谢。
  • 您是通过 XenDesktop 发布整个虚拟 Windows 桌面,还是仅发布单个应用程序?如果您要发布整个桌面,该小工具应该仍然是一个可行的解决方案。如果没有另一个想法,那就是编写一个简单的“放置托盘”Windows 窗体应用程序,该应用程序接受类似于提议的小工具的项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多