2010-05-22 85 views
4
  1. 如何把剪切/複製參照具體的文件和/或文件夾到Windows剪貼板中,這樣,當我打開標準的Windows資源管理器窗口,去的地方,並按下按Ctrl + V - 文件粘貼?如何以符合系統標準的格式以剪貼/複製/從Windows剪貼板中獲取文件?

  2. 如果我複製或剪切一些文件/文件夾在Windows資源管理器,我怎麼得到這個信息(全名以及他們是否被切斷或複製)在我的計劃?

我編程在C# 4.0,但其他語言的方式也很有趣。

回答

1

如果您使用Windows Forms,看System.Windows.Forms.Clipboard。我認爲這應該能夠做到這一點。我不確定如何做你想做的事情,因爲我從來沒有看過它,但我首先看FileDropList方法(GetFileDropList等),因爲它們看起來很有前途。

如果您需要了解它是否是複製或剪切以及類似的更詳細的信息,您似乎必須使用IDataObject界面。

4

我已經得到了90%的溶液,從剪貼板格式逆向工程和我this thread答案。您需要設置兩個剪貼板數據。文件列表,很容易做到。另一個名爲「Preferred Dropeffect」的剪貼板格式指示是否請求複製或移動文件。導致這種代碼:

public static void StartCopyFiles(IList<string> files, bool copy) { 
     var obj = new DataObject(); 
     // File list first 
     var coll = new System.Collections.Specialized.StringCollection(); 
     coll.AddRange(files.ToArray()); 
     obj.SetFileDropList(coll); 
     // Then the operation 
     var strm = new System.IO.MemoryStream(); 
     strm.WriteByte(copy ? (byte)DragDropEffects.Copy : (byte)DragDropEffects.Move); 
     obj.SetData("Preferred Dropeffect", strm); 
     Clipboard.SetDataObject(obj); 
    } 

使用範例:

 var files = new List<string>() { @"c:\temp\test1.txt", @"c:\temp\test2.txt" }; 
     StartCopyFiles(files, true); 

在Windows資源管理器按Ctrl + V複製從我的C文件:\ temp目錄。

我沒能去的是「一刀切」的操作,通過虛假至StartCopyFiles()產生的複製操作,在沒有從源目錄中刪除原始文件。不知道爲什麼,應該工作。我認爲「首選DropEffects」的實際流格式更有趣,可能涉及臭名昭着的PIDL。

+1

對於任何發現此答案的人: 因爲您需要支持「優化移動操作」或「粘貼刪除操作」,所以剪切和粘貼不起作用。 檢查此鏈接瞭解詳細信息 http://msdn.microsoft.com/en-us/library/windows/desktop/bb776904(v=vs.85).aspx#delete_on_paste – Woodman 2013-09-16 06:47:00

+0

可以更新。 – 2013-12-17 15:23:23

1

this answer它描述了工作切割操作。 (對於複製操作,將2更改爲5.)