当前位置: 首页 > 编程语言 > C#

将文件从TrueCrypt卷复制到剪贴板?分享

时间:2023-04-10 11:29:39 C#

将文件从TrueCrypt卷复制到剪贴板?我使用此代码将文件复制到剪贴板:IDataObjectdata=newDataObject();data.SetData(DataFormats.FileDrop,newstring[]{@"X:test.doc"});MemoryStream备忘录=newMemoryStream(4);byte[]bytes=newbyte[]{(byte)(5),0,0,0};memo.Write(bytes,0,bytes.Length);data.SetData("首选DropEffect",备忘录);剪贴板.SetDataObject(数据);不幸的是,如果磁盘是TrueCrypt安装的卷,这将不起作用。在TrueCrypt卷上执行此操作的方法是什么?不幸的是,如果没有正确的ShellID列表,我认为您无法摆脱它,而且在我的Windows7上,您的代码甚至无法与常规文件系统一起使用。正确的代码首先提供一个CIDL:vardata=newDataObject();varfiles=newStringCollection(){@"T:Test.doc"};data.SetFileDropList(文件);data.SetData("首选DropEffect",true,newMemoryStream(newbyte[]{5,0,0,0}));data.SetData("ShellIDListArray",true,CreateShellIDList(files));剪贴板.SetDataObject(数据,真);其中CreateShellIDList创建所需CIDA(CFSTR_SHELLIDLIST)结构的二进制表示。实现如下:[DllImport("shell32.dll",CharSet=CharSet.Auto)]publicstaticexternIntPtrILCreateFromPath(stringpath);[DllImport("shell32.dll",CharSet=CharSet.None)]publicstaticexternvoidILFree(IntPtrpidl);[DllImport("shell32.dll",CharSet=CharSet.None)]publicstaticexternintILGetSize(IntPtrpidl);privatestaticMemoryStreamCreateShellIDList(StringCollectionfilenames){//首先将所有文件转换成pidlslistintpos=0;byte[][]pidls=newbyte[filenames.Count][];foreach(varfilenameinfilenames){//根据名称获取pidlIntPtrpidl=ILCreateFromPath(filename);intpidlSize=ILGetSize(pidl);//复制到我们的托管数组pidls[pos]=newbyte[pidlSize];Marshal.Copy(pidl,pidls[pos++],0,pidlSize);ILFree(pidl);}//确定在CIDA中我们将开始抽取PIDL的位置intpidlOffset=4*(filenames.Count+2);//启动CIDA流streamvarmemStream=newMemoryStream();varsw=newBinaryWriter(memSt令);//用文件数初始化CIDAsw.Write(filenames.Count);//计算并写入从根开始的每个pidl的相对偏移量sw.Write(pidlOffset);pidlOffset+=4;//root是4个字节foreach(varpidlinpidls){sw.Write(pidlOffset);pidlOffset+=pidl.长度;}//写入根pidl(0)后跟所有pidlssw.Write(0);foreach(pidls中的varpidl)sw.Write(pidl);//流现在包含CIDAreturnmemStream;我不能在这里得到所有的功劳,我不久前找到了这个CIDA代码并将它移植到c#真的不记得原始来源,但到目前为止它工作正常(我刚刚在TrueCrypt上测试过)上面是C#学习教程:将文件从TrueCrypt卷复制到剪贴板?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢