我有 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);
}
Run Code Online (Sandbox Code Playgroud)
示例用法:
var files = new List<string>() { @"c:\temp\test1.txt", @"c:\temp\test2.txt" };
StartCopyFiles(files, true);
Run Code Online (Sandbox Code Playgroud)
在 Windows 资源管理器中按 Ctrl+V 从我的 c:\temp 目录复制文件。
我无法进行的是“剪切”操作,将 false 传递给 StartCopyFiles() 产生了复制操作,原始文件未从源目录中删除。不知道为什么,应该有效。我认为“Preferred DropEffects”的实际流格式更漂亮,可能涉及臭名昭著的PIDL。
如果您使用的是Windows 窗体,请查看System.Windows.Forms.Clipboard。我认为应该能够做到这一点。我不知道如何做你想做的事情,因为我从来没有研究过它,但我会首先看看 FileDropList 方法(GetFileDropList等),因为它们看起来很有希望。
如果您需要查明它是副本还是剪切以及类似的更详细信息,似乎您必须使用IDataObject接口。
| 归档时间: |
|
| 查看次数: |
4087 次 |
| 最近记录: |