Share 发表于 2017-5-30 05:11:01

解压外部加密文档



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]
查看完整版本: 解压外部加密文档