2012-03-05 37 views
1

这已经被问过了,但是用我见过的方法,我无法得到我想要发生的事情。目前,我有一个Windows窗体,如果我运行.EXE(并调出窗体本身),我可以从Outlook放入电子邮件没有问题。但是,我正在寻找的是当用户直接从Outlook将消息放到.EXE文件上的图标时具有此功能。如果我将文件保存到本地并将其放到图标上,但可以直接从Outlook获取,则可以做到这一点。我需要在应用上设置一个属性来完成这项工作。我使用这段代码来将消息放到窗体窗口上来工作。从Outlook窗口拖放到.Net中的应用程序.EXE文件(或图标)。

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); 
     } 
    } 

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

+0

拖放到一个EXE将完全由资源管理器控制(或任何它正在显示您的EXE)。它与你自己的代码无关。 – adelphus 2012-03-05 17:26:47

+0

@adelphus好的,有没有需要改变的设置?就像我说的,对于“文件”它工作得很好,但是在图标外面,没有骰子。感谢您的信息 – 2012-03-05 17:30:47

+0

你误会了。资源管理器将被编码以处理文件 - 没有设置可以更改,因为内部资源管理器不会知道如何处理Outlook项目。对你来说,该项目可能看起来像一个文件,但对于资源管理器来说,它完全不同。我不相信你的问题有一个解决方案。 – adelphus 2012-03-05 17:37:48

回答

3

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

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

一旦你创建你的一滴处理程序,它是一个过程分为两个步骤:

  1. 安装程序时,在桌面上创建一个文件,一个唯一的文件扩展名(如.myprogdroptarget )。
  2. 注册.myprogdroptarget的放置处理程序,以便此图标变为对象的“魔术”放置目标。

有关如何在ATL/C++创建一个Drop处理程序,检查出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/

+0

第二种解决方案的唯一问题是,我们有90%的用户通过采用Citrix Desktop的瘦客户端。我不确定小部件如何与该配置一起工作。谢谢。 – 2012-03-05 18:43:02

+0

您是通过XenDesktop发布整个虚拟Windows桌面,还是仅发布单个应用程序?如果您要发布整个桌面,该小工具应该仍然是一个可行的解决方案。如果不是另一个想法,可以编写一个简单的“托盘”Windows窗体应用程序,该应用程序接受类似于特定小工具的项目。 – 2012-03-06 15:26:39

相关问题