为
了找这个答案,我从下午一直到深夜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
转自http://tianmoboping.blog.163.com/blog/static/1573953220087273219414/
注意:files字段必须是定义为string[] ,要不然会出现右键有粘贴但是粘贴不成功的问题
示例:http://hi.baidu.com/raoyao/blog/item/82b7013b0a279ee715cecba8.html