

为了找这个答案,我从下午一直到深夜3:10。终于找到了。万岁。用百度搜,无论我怎么搜法,都是炒现饭。人人都说的一个样。前面那篇VC的代码,实在翻不成C#,结构体、常数、API声明的事搞得我头都大了。不得己只好搜外文资料。果然,一下子就在codeproject搜到了。
点此处查看原始资料。
实现的代码不多:
/// <summary> /// 复制或剪切文件至剪贴板 /// </summary> /// <param name="files">文件路径的数组</param> /// <param name="cut">是否剪切true为剪切,false为复制</param> void CopyToClipboard(string[] files,bool cut) { if (files == null) return; IDataObject data = new DataObject(DataFormats.FileDrop, files); MemoryStream memo = new MemoryStream(4); byte[] bytes = new byte[] { (byte)(cut ? 2 : 5), 0, 0, 0 }; memo.Write(bytes, 0, bytes.Length); data.SetData("Preferred DropEffect", memo); Clipboard.SetDataObject(data); } 终于搞定了。这是一场意志的考验啊。当得到答案的时候,我差点热泪盈眶。5555555……
总结。剪切的问题难就难在要设那个标志位。而这个设法dotnet并不提供明显的支持。文件的剪切有两大关键:
一、把文件路径的列表SetData到剪贴板。
二、把标志信息也按照一定的格式SetData到剪贴板
上面代码我己测试通过:VS2008+.net 2.0+xp sp2
评论