2012-03-05 75 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

相關問題