如何把剪切/複製參照具體的文件和/或文件夾到Windows剪貼板中,這樣,當我打開標準的Windows資源管理器窗口,去的地方,並按下按Ctrl + V - 文件粘貼?如何以符合系統標準的格式以剪貼/複製/從Windows剪貼板中獲取文件?
如果我複製或剪切一些文件/文件夾在Windows資源管理器,我怎麼得到這個信息(全名以及他們是否被切斷或複製)在我的計劃?
我編程在C# 4.0,但其他語言的方式也很有趣。
如何把剪切/複製參照具體的文件和/或文件夾到Windows剪貼板中,這樣,當我打開標準的Windows資源管理器窗口,去的地方,並按下按Ctrl + V - 文件粘貼?如何以符合系統標準的格式以剪貼/複製/從Windows剪貼板中獲取文件?
如果我複製或剪切一些文件/文件夾在Windows資源管理器,我怎麼得到這個信息(全名以及他們是否被切斷或複製)在我的計劃?
我編程在C# 4.0,但其他語言的方式也很有趣。
如果您使用Windows Forms,看System.Windows.Forms.Clipboard。我認爲這應該能夠做到這一點。我不確定如何做你想做的事情,因爲我從來沒有看過它,但我首先看FileDropList方法(GetFileDropList等),因爲它們看起來很有前途。
如果您需要了解它是否是複製或剪切以及類似的更詳細的信息,您似乎必須使用IDataObject界面。
我已經得到了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。
看this answer它描述了工作切割操作。 (對於複製操作,將2更改爲5.)
對於任何發現此答案的人: 因爲您需要支持「優化移動操作」或「粘貼刪除操作」,所以剪切和粘貼不起作用。 檢查此鏈接瞭解詳細信息 http://msdn.microsoft.com/en-us/library/windows/desktop/bb776904(v=vs.85).aspx#delete_on_paste – Woodman 2013-09-16 06:47:00
可以更新。 – 2013-12-17 15:23:23