📄 spskinunzip.pas
字号:
{*******************************************************************}
{ }
{ Almediadev Visual Component Library }
{ DynamicSkinForm }
{ Version 9.15 }
{ }
{ Copyright (c) 2000-2008 Almediadev }
{ ALL RIGHTS RESERVED }
{ }
{ Home: http://www.almdev.com }
{ Support: support@almdev.com }
{ }
{*******************************************************************}
unit spSkinUnZip;
interface
uses
Windows, Messages, SysUtils, Classes;
type
TDllPrnt = function(Buffer: PChar; Size: ULONG): integer; stdcall;
TDllPassword = function(P: PChar; N: Integer; M, Name: PChar): integer; stdcall;
TDllService = function (CurFile: PChar; Size: ULONG): integer; stdcall;
TDllSnd = procedure; stdcall;
TDllReplace = function(FileName: PChar): integer; stdcall;
TDllMessage = procedure (UnCompSize: ULONG; CompSize: ULONG; Factor: UINT;
Month: UINT; Day: UINT; Year: UINT; Hour: UINT;
Minute: UINT; C: Char;
FileName: PChar; MethBuf: PChar; CRC: ULONG;
Crypt: Char); stdcall;
TUserFunctions = record
Print: TDllPrnt;
Sound: TDllSnd;
Replace: TDllReplace;
Password: TDllPassword;
SendApplicationMessage: TDllMessage;
ServCallBk: TDllService;
TotalSizeComp: ULONG;
TotalSize: ULONG;
CompFactor: Integer;
NumMembers: UINT;
cchComment: UINT;
end;
TDCL = record
ExtractOnlyNewer: Integer;
SpaceToUnderscore: Integer;
PromptToOverwrite: Integer;
fQuiet: Integer;
nCFlag: Integer;
nTFlag: Integer;
nVFlag: Integer;
nUFlag: Integer;
nZFlag: Integer;
nDFlag: Integer;
nOFlag: Integer;
nAFlag: Integer;
nZIFlag: Integer;
C_flag: Integer;
fPrivilege: Integer;
lpszZipFN: PChar;
lpszExtractDir: PChar;
end ;
TspSkinUnZip = class(TComponent)
protected
procedure SetUserFunctions(var UF: TUserFunctions);
procedure SetUnZipOptions(var AOptions: TDCL; var AFileName, ADirName: PChar);
public
procedure UnZipToDir(AFileName, ADir: String);
end;
function DllPrnt(Buffer: PChar; Size: ULONG): integer; stdcall;
function DllPassword(P: PChar; N: Integer; M, Name: PChar): integer; stdcall;
function DllReplace(FileName: PChar): integer; stdcall;
function DllService(CurFile: PChar; Size: ULONG): integer; stdcall;
procedure DllMessage(UnCompSize: ULONG; CompSize: ULONG; Factor: UINT;
Month: UINT; Day: UINT; Year: UINT;
Hour: UINT; Minute: UINT; C: Char;
FileName: PChar; MethBuf: PChar;
CRC: ULONG; Crypt: Char); stdcall;
implementation
uses ShellApi;
type
PPChar = ^PChar;
const
UNZIPDLLNAME = 'unzip32.dll';
function DllPrnt(Buffer: PChar; Size: ULONG): integer;
begin
Result := Size;
end;
function DllReplace(FileName: PChar): integer;
begin
Result := 1;
end;
function DllPassword(P: PChar; N: Integer; M, Name: PChar): integer;
begin
Result := 1;
end;
function DllService(CurFile: PChar; Size: ULONG): integer;
begin
Result := 0;
end;
procedure DllMessage(UnCompSize: ULONG; CompSize: ULONG; Factor: UINT;
Month: UINT; Day: UINT; Year: UINT; Hour: UINT; Minute: UINT;
C: Char; FileName: PChar; MethBuf: PChar; CRC: ULONG;
Crypt: Char);
begin
end;
procedure TspSkinUnZip.SetUserFunctions;
begin
with UF do
begin
@Print := @DllPrnt;
@Replace := @DllReplace;
@Sound := nil;
@Password := @DllPassword;
@SendApplicationMessage := @DllMessage;
@ServCallBk := @DllService;
end;
end;
procedure TspSkinUnZip.SetUnZipOptions;
begin
with AOptions do
begin
ExtractOnlyNewer := 0;
SpaceToUnderscore := 0;
PromptToOverwrite := 1;
fQuiet := 0;
nCFlag := 0;
nTFlag := 0;
nVFlag := 0;
nUFlag := 0;
nZFlag := 0;
nDFlag := 0;
nOFlag := 0;
nAFlag := 0;
nZIFlag := 0;
C_flag := 1;
fPrivilege := 1;
lpszExtractDir := ADirName;
lpszZipFN := AFileName;
end;
end;
procedure TspSkinUnZip.UnZipToDir;
var
UserFunctions: TUserFunctions;
Opt: TDCL;
FileName, DirName: PChar;
UnZip32: Cardinal;
Wiz_SingleEntryUnzip: function (ifnc: Integer; ifnv: PPChar; xfnc: Integer;
xfnv: PPChar; var Options: TDCL;
var UserFunc: TUserFunctions): Integer; stdcall;
begin
UnZip32 := LoadLibrary(UNZIPDLLNAME);
if UnZip32 <> 0
then
begin
Wiz_SingleEntryUnzip := GetProcAddress(UnZip32, 'Wiz_SingleEntryUnzip');
if (@Wiz_SingleEntryUnzip <> nil)
then
begin
FileName := PChar(AFileName);
DirName := PChar(ADir);
SetUserFunctions(UserFunctions);
SetUnZipOptions(Opt, FileName, DirName);
WIZ_SingleEntryUnzip(0, nil, 0, nil, Opt, UserFunctions);
end;
FreeLibrary(UnZip32);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -