各位大虾仁:
   用了很多方法,但瞬间对文件夹进行加密而隐藏(不是将目录打包成文件后加密,而是像“金刚加密锁”那样瞬间将文件夹加密完成),总是不成功,真的DELPHI如何实现这一功能呢?
急待想通,望各大侠们指明回家的路在下感激涕零。。

解决方案 »

  1.   

    通过修改Folder.htt可以实现,呵呵.....不过不怎么好
      

  2.   

    贴:
    1.选择要加密的文件夹,查看--》自定义文件夹--》创建HTML文档
    2执行步骤1后,会在要加密的文件夹下生成FOLDER。HTT文件,用记事本打开
     找到这一行<!-- webbot bot="HTMLMarkup" endspan 
     在其下添加:
    <script language="vbscript">
    function askpass()
    document.all.filelist.style.visibility="hidden"
    passwrd="csdn"
    getii=window.prompt("请输入密码:")
    if getii =passwrd then
    window.alert("欢迎!!")
    document.all.filelist.style.visibility="visible"
    else
    window.alert("密码错!!")
    end if
    end function
    </script>3。找到这一行<body scroll =no onload ="init()">
    改为         <body scroll=no onload="askpass()">一句,保存退出。
    4。上面密码:csdn,可以修改
      

  3.   

    我们先来说一下如何制作一个EXE文件加密器吧。 
      EXE文件加密器的原理:建立两个文件,一个用来添加资源到另外一个EXE文件里面,称为添加程序。另外一个被添加的EXE文件称为头文件。该程序的功能是把添加到自己里面的文件读出来。Windows下的EXE文件结构比较复杂,有的程序还有校验和,当发现自己被改变后会认为自己被病毒感染而拒绝执行。所以我们把文件添加到自己的程序里面,这样就不会改变原来的文件结构了。我们先写一个添加函数,该函数的功能是把一个文件当作一个流添加到另外一个文件的尾部。函数如下:Function Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
    var
    Target,Source:TFileStream;
    MyFileSize:integer;
    begin
    try
    Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
    Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
    try
    Target.Seek(0,soFromEnd);//往尾部添加资源
    Target.CopyFrom(Source,0);
    MyFileSize:=Source.Size+Sizeof(MyFileSize);//计算资源大小,并写入辅程尾部
    Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
    finally
    Target.Free;
    Source.Free;
    end;
    except
    Result:=False;
    Exit;
    end;
    Result:=True;
    end;
    有了上面的基础,我们应该很容易看得懂这个函数。其中参数SourceFile是要添加的文件,参数TargetFile是被添加到的目标文件。比如说把a.exe添加到b.exe里面可以:Cjt_AddtoFile('a.exe',b.exe');如果添加成功就返回True否则返回假。
    根据上面的函数我们可以写出相反的读出函数:
    Function Cjt_LoadFromFile(SourceFile,TargetFile :string):Boolean;
    var
    Source:TFileStream;
    Target:TMemoryStream;
    MyFileSize:integer;
    begin
    try
    Target:=TMemoryStream.Create;
    Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
    try
    Source.Seek(-sizeof(MyFileSize),soFromEnd);
    Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小
    Source.Seek(-MyFileSize,soFromEnd);//定位到资源位置
    Target.CopyFrom(Source,MyFileSize-sizeof(MyFileSize));//取出资源
    Target.SaveToFile(TargetFile);//存放到文件
    finally
    Target.Free;
    Source.Free;
    end;
    except
    Result:=false;
    Exit;
    end;
    Result:=true;
    end;
      其中参数SourceFile是已经添加了文件的文件名称,参数TargetFile是取出文件后保存的目标文件名。比如说Cjt_LoadFromFile('b.exe','a.txt');在b.exe中取出文件保存为a.txt。如果取出成功就返回True否则返回假。
    打开Delphi,新建一个工程,在窗口上放上一个Edit控件Edit1和两个Button:Button1和Button2。Button的Caption属性分别设置为“确定”和“取消”。在Button1的Click事件中写代码:
    var S:string;
    begin
    S:=ChangeFileExt(Application.ExeName,'.Cjt');
    if Edit1.Text='790617' then 
    begin
    Cjt_LoadFromFile(Application.ExeName,S);
    {取出文件保存在当前路径下并命名"原文件.Cjt"}
    Winexec(pchar(S),SW_Show);{运行"原文件.Cjt"}
    Application.Terminate;{退出程序}
    end
    else 
    Application.MessageBox('密码不对,请重新输入!','密码错误',MB_ICONERROR+MB_OK);
      编译这个程序,并把EXE文件改名为head.exe。新建一个文本文件head.rc,内容为: head exefile head.exe,然后把它们拷贝到Delphi的BIN目录下,执行Dos命令Brcc32.exe head.rc,将产生一个head.res的文件,这个文件就是我们要的资源文件。
    希望对你能又帮助
      

  4.   

    楼上的 ”xinshiji(无名)“ 首先应谢谢你,可你说的,我我一年前的用的。
    楼上的“Kshape([伟大的大伟!]/一心考研中!)” 你真可爱。。 
    我试了很多方法,可没有一个成功,。
    有一个思想是这样的:
    将文件夹直接用函数删除,然在磁盘上打上不可覆盖的标记是可以彻底隐藏目录的。可实践起来很不顺利。有谁能指明前方的路。