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的文件,这个文件就是我们要的资源文件,先留着。
我们的头文件已经建立了,下面我们来建立添加程序。
新建一个工程,放上以下控件:一个Edit, 一个Opendialog, 两个Button1的Caption属性分别设置为" 选择文件" 和" 加密" 。在源程序中添加一句: {$R head.res}并把head.res文件拷贝到程序当前目录下。这样一来就把刚才的head.exe跟程序一起编译了。
在Button1的Cilck事件里面写下代码:
if OpenDialog1.Execute then Edit1.Text := OpenDialog1.FileName;
在Button2的Cilck事件里面写下代码:
var S: string;
begin
S := ExtractFilePath(Edit1.Text);
if ExtractRes('exefile', 'head', S + 'head.exe') then
if Cjt_AddtoFile(Edit1.Text, S + 'head.exe') then
if DeleteFile(Edit1.Text) then
if RenameFile(S + 'head.exe', Edit1.Text) then
Application.MessageBox('文件加密成功!', '信息', MB_ICONINFORMATION + MB_OK)
else
begin
if FileExists(S + 'head.exe') then DeleteFile(S + 'head.exe');
Application.MessageBox('文件加密失败!', '信息', MB_ICONINFORMATION + MB_OK)
end;
end;
其中ExtractRes为自定义函数,它的作用是把head.exe从资源文件中取出来。
function ExtractRes(ResType, ResName, ResNewName: string): boolean;
var
Res: TResourceStream;
begin
try
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
Result := true;
finally
Res.Free;
end;
except
Result := false;
end;
end;