解压外部加密文档
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy
var
ProgressBar : TNewProgressBar;
ExtractFile:TNewStaticText;
Button1:TButton;
procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:PAnsiChar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';
procedure InitializeWizard();
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ExtractFile:=TNewStaticText.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(55);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 100;
ProgressBar.Position := 0;
ExtractFile.parent:= WizardForm.InstallingPage;
ExtractFile.autosize:= false;
ExtractFile.Width := Width;
ExtractFile.top:=Top + ScaleX(35);
ExtractFile.caption:='解压 7zip';
end;
end;
procedure Button1OnClick(Sender: TObject);
begin
CancelExtract;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
Button1:=TButton.create(WizardForm);
Button1.parent:=WizardForm;
Button1.width:=135;
Button1.caption:='取消解压';
Button1.left:=260;
Button1.top:=WizardForm.cancelbutton.top;
Button1.OnClick:=@Button1OnClick;
try
Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{src}') + '\1.7z', ExpandConstant('{app}'), 'mypass'); // 外部文件 1.7z,最后这个参数是它的解压密码
Button1.visible:=false;
except
MsgBox('密码错误!', mbInformation, MB_OK);
Button1.visible:=false;
end;
end;
end;
上面的例子中,外部文件为 1.7z,它位于安装程序 setup.exe 所在的文件夹。1.7z 文件的解压密码是 mypass
不添加第二个进度条,而是直接在原来第一个进度条中显示解压外部文件进度的代码:
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy
var
Button1:TButton;
procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:PAnsiChar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';
procedure Button1OnClick(Sender: TObject);
begin
CancelExtract;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
Button1:=TButton.create(WizardForm);
Button1.parent:=WizardForm;
Button1.width:= WizardForm.cancelbutton.width;
Button1.Height:= WizardForm.cancelbutton.Height;
Button1.caption:='取消解压';
Button1.left:= 290;
Button1.top:=WizardForm.cancelbutton.top;
Button1.OnClick:=@Button1OnClick;
WizardForm.StatusLabel.Caption:= '正在解压外部 7zip 文件,请稍候...';
try
Extract7z (wizardform.handle, WizardForm.ProgressGauge.handle, WizardForm.FileNameLabel.handle, ExpandConstant('{src}') + '\1.7z', ExpandConstant('{app}'), 'mypass'); // 外部文件 1.7z,最后这个参数是它的解压密码
Button1.visible:=false;
except
MsgBox('密码错误!', mbInformation, MB_OK);
Button1.visible:=false;
end;
end;
end;
页:
[1]