У меня есть решение на 90%, переработанное из форматов буфера обмена, и мой ответ в этой теме . Вам нужно будет установить две части данных буфера обмена. Список файлов, это легко сделать. И еще один формат буфера обмена с именем «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);
Нажатие Ctrl + V в проводнике Windows скопировало файлы из моего каталога c: \ temp.
То, что я не смог получить, это операция «вырезать», передача false в StartCopyFiles () произвела операцию копирования, исходные файлы которой не были удалены из исходного каталога. Не знаю почему, должно было сработать. Я считаю, что фактический формат потока «Preferred DropEffects» более изящен, возможно, с участием печально известных PIDL.