杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2420|回复: 0

解压外部加密文档

[复制链接]
发表于 2017-5-30 05:11:01 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. [Files]
  2. Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy

  3. [Code]
  4. var
  5. ProgressBar : TNewProgressBar;
  6. ExtractFile:TNewStaticText;
  7. Button1:TButton;

  8. procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:PAnsiChar); external 'Extract7z@files:is7z.dll stdcall';

  9. procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';

  10. procedure InitializeWizard();
  11. begin
  12.   ProgressBar := TNewProgressBar.Create(WizardForm);
  13.   ExtractFile:=TNewStaticText.Create(WizardForm);
  14.   with WizardForm.ProgressGauge do
  15.     begin
  16.       ProgressBar.Left := Left;
  17.       ProgressBar.Top := Top + ScaleX(55);
  18.       ProgressBar.Width := Width;
  19.       ProgressBar.Height := Height;
  20.       ProgressBar.Parent := WizardForm.InstallingPage;
  21.       ProgressBar.max := 100;
  22.       ProgressBar.Position := 0;
  23.       ExtractFile.parent:= WizardForm.InstallingPage;
  24.       ExtractFile.autosize:= false;
  25.       ExtractFile.Width := Width;
  26.       ExtractFile.top:=Top + ScaleX(35);
  27.       ExtractFile.caption:='解压 7zip';
  28.     end;
  29. end;

  30. procedure Button1OnClick(Sender: TObject);
  31. begin
  32. CancelExtract;
  33. end;

  34. procedure CurStepChanged(CurStep: TSetupStep);
  35. begin
  36.   If CurStep=ssPostInstall then
  37.    begin
  38.     Button1:=TButton.create(WizardForm);
  39.     Button1.parent:=WizardForm;
  40.     Button1.width:=135;
  41.     Button1.caption:='取消解压';
  42.     Button1.left:=260;
  43.     Button1.top:=WizardForm.cancelbutton.top;
  44.     Button1.OnClick:=@Button1OnClick;
  45.     try
  46.      Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{src}') + '\1.7z', ExpandConstant('{app}'), 'mypass');    // 外部文件 1.7z,最后这个参数是它的解压密码
  47.      Button1.visible:=false;
  48.     except
  49.      MsgBox('密码错误!', mbInformation, MB_OK);
  50.      Button1.visible:=false;
  51.     end;
  52.    end;
  53. end;
复制代码
上面的例子中,外部文件为 1.7z,它位于安装程序 setup.exe 所在的文件夹。1.7z 文件的解压密码是 mypass


不添加第二个进度条,而是直接在原来第一个进度条中显示解压外部文件进度的代码:
  1. [Setup]
  2. AppName=My Program
  3. AppVerName=My Program version 1.5
  4. DefaultDirName={pf}\My Program
  5. DefaultGroupName=My Program

  6. [Files]
  7. Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy

  8. [Code]
  9. var
  10. Button1:TButton;

  11. procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:PAnsiChar); external 'Extract7z@files:is7z.dll stdcall';
  12. procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';

  13. procedure Button1OnClick(Sender: TObject);
  14. begin
  15. CancelExtract;
  16. end;

  17. procedure CurStepChanged(CurStep: TSetupStep);
  18. begin
  19.   If CurStep=ssPostInstall then
  20.    begin
  21.     Button1:=TButton.create(WizardForm);
  22.     Button1.parent:=WizardForm;
  23.     Button1.width:= WizardForm.cancelbutton.width;
  24.     Button1.Height:= WizardForm.cancelbutton.Height;
  25.     Button1.caption:='取消解压';
  26.     Button1.left:= 290;
  27.     Button1.top:=WizardForm.cancelbutton.top;
  28.     Button1.OnClick:=@Button1OnClick;
  29.     WizardForm.StatusLabel.Caption:= '正在解压外部 7zip 文件,请稍候...';
  30.     try
  31.      Extract7z (wizardform.handle, WizardForm.ProgressGauge.handle, WizardForm.FileNameLabel.handle, ExpandConstant('{src}') + '\1.7z', ExpandConstant('{app}'), 'mypass');    // 外部文件 1.7z,最后这个参数是它的解压密码
  32.      Button1.visible:=false;
  33.     except
  34.      MsgBox('密码错误!', mbInformation, MB_OK);
  35.      Button1.visible:=false;
  36.     end;
  37.    end;
  38. end;
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-17 09:41 , Processed in 0.107463 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表