📄 vbzipbas.bas
字号:
Public Const ZE_LOGIC = 5 ' Internal Logic Error
Public Const ZE_BIG = 6 ' Entry Too Large To Split Error
Public Const ZE_NOTE = 7 ' Invalid Comment Format Error
Public Const ZE_TEST = 8 ' Zip Test (-T) Failed Or Out Of Memory Error
Public Const ZE_ABORT = 9 ' User Interrupted Or Termination Error
Public Const ZE_TEMP = 10 ' Error Using A Temp File
Public Const ZE_READ = 11 ' Read Or Seek Error
Public Const ZE_NONE = 12 ' Nothing To Do Error
Public Const ZE_NAME = 13 ' Missing Or Empty Zip File Error
Public Const ZE_WRITE = 14 ' Error Writing To A File
Public Const ZE_CREAT = 15 ' Could't Open To Write Error
Public Const ZE_PARMS = 16 ' Bad Command Line Argument Error
Public Const ZE_OPEN = 18 ' Could Not Open A Specified File To Read Error
'-- These Functions Are For The ZIP32.DLL
'--
'-- Puts A Function Pointer In A Structure
'-- For Use With Callbacks...
Public Function FnPtr(ByVal lp As Long) As Long
FnPtr = lp
End Function
'-- Callback For ZIP32.DLL - DLL Print Function
Public Function ZDLLPrnt(ByRef fname As ZipCBChar, ByVal x As Long) As Long
Dim s0 As String
Dim xx As Long
'-- Always Put This In Callback Routines!
On Error Resume Next
s0 = ""
'-- Get Zip32.DLL Message For processing
For xx = 0 To x
If fname.ch(xx) = 0 Then
Exit For
Else
s0 = s0 + Chr(fname.ch(xx))
End If
Next
'----------------------------------------------
'-- This Is Where The DLL Passes Back Messages
'-- To You! You Can Change The Message Printing
'-- Below Here!
'----------------------------------------------
'-- Display Zip File Information
'-- zZipInfo = zZipInfo & s0
Form1.Print s0;
DoEvents
ZDLLPrnt = 0
End Function
'-- Callback For ZIP32.DLL - DLL Service Function
Public Function ZDLLServ(ByRef mname As ZipCBChar, ByVal x As Long) As Long
' x is the size of the file
Dim s0 As String
Dim xx As Long
'-- Always Put This In Callback Routines!
On Error Resume Next
s0 = ""
'-- Get Zip32.DLL Message For processing
For xx = 0 To 4096
If mname.ch(xx) = 0 Then
Exit For
Else
s0 = s0 + Chr(mname.ch(xx))
End If
Next
' Form1.Print "-- " & s0 & " - " & x & " bytes"
' This is called for each zip entry.
' mname is usually the null terminated file name and x the file size.
' s0 has trimmed file name as VB string.
' At this point, s0 contains the message passed from the DLL
' It is up to the developer to code something useful here :)
ZDLLServ = 0 ' Setting this to 1 will abort the zip!
End Function
'-- Callback For ZIP32.DLL - DLL Password Function
Public Function ZDLLPass(ByRef p As ZipCBChar, _
ByVal n As Long, ByRef m As ZipCBChar, _
ByRef Name As ZipCBChar) As Integer
Dim prompt As String
Dim xx As Integer
Dim szpassword As String
'-- Always Put This In Callback Routines!
On Error Resume Next
ZDLLPass = 1
'-- If There Is A Password Have The User Enter It!
'-- This Can Be Changed
szpassword = InputBox("Please Enter The Password!")
'-- The User Did Not Enter A Password So Exit The Function
If szpassword = "" Then Exit Function
'-- User Entered A Password So Proccess It
For xx = 0 To 255
If m.ch(xx) = 0 Then
Exit For
Else
prompt = prompt & Chr(m.ch(xx))
End If
Next
For xx = 0 To n - 1
p.ch(xx) = 0
Next
For xx = 0 To Len(szpassword) - 1
p.ch(xx) = Asc(Mid(szpassword, xx + 1, 1))
Next
p.ch(xx) = Chr(0) ' Put Null Terminator For C
ZDLLPass = 0
End Function
'-- Callback For ZIP32.DLL - DLL Comment Function
Public Function ZDLLComm(ByRef s1 As ZipCBChar) As Integer
Dim xx%, szcomment$
'-- Always Put This In Callback Routines!
On Error Resume Next
ZDLLComm = 1
szcomment = InputBox("Enter the comment")
If szcomment = "" Then Exit Function
For xx = 0 To Len(szcomment) - 1
s1.ch(xx) = Asc(Mid$(szcomment, xx + 1, 1))
Next xx
s1.ch(xx) = Chr(0) ' Put null terminator for C
End Function
'-- Main ZIP32.DLL Subroutine.
'-- This Is Where It All Happens!!!
'--
'-- (WARNING!) Do Not Change This Function!!!
'--
Public Function VBZip32() As Long
Dim retcode As Long
On Error Resume Next '-- Nothing Will Go Wrong :-)
retcode = 0
'-- Set Address Of ZIP32.DLL Callback Functions
'-- (WARNING!) Do Not Change!!!
ZUSER.ZDLLPrnt = FnPtr(AddressOf ZDLLPrnt)
ZUSER.ZDLLPASSWORD = FnPtr(AddressOf ZDLLPass)
ZUSER.ZDLLCOMMENT = FnPtr(AddressOf ZDLLComm)
ZUSER.ZDLLSERVICE = FnPtr(AddressOf ZDLLServ)
'-- Set ZIP32.DLL Callbacks
retcode = ZpInit(ZUSER)
If retcode = 0 Then
MsgBox "Zip32.dll did not initialize. Is it in the current directory " & _
"or on the command path?", vbOKOnly, "VB Zip"
Exit Function
End If
'-- Setup ZIP32 Options
'-- (WARNING!) Do Not Change!
ZOPT.Date = zDate ' "12/31/79"? US Date?
ZOPT.szRootDir = zRootDir ' Root Directory Pathname
ZOPT.szTempDir = zTempDir ' Temp Directory Pathname
ZOPT.fSuffix = zSuffix ' Include Suffixes (Not Yet Implemented)
ZOPT.fEncrypt = zEncrypt ' 1 If Encryption Wanted
ZOPT.fSystem = zSystem ' 1 To Include System/Hidden Files
ZOPT.fVolume = zVolume ' 1 If Storing Volume Label
ZOPT.fExtra = zExtra ' 1 If Including Extra Attributes
ZOPT.fNoDirEntries = zNoDirEntries ' 1 If Ignoring Directory Entries
ZOPT.fExcludeDate = zExcludeDate ' 1 If Excluding Files Earlier Than A Specified Date
ZOPT.fIncludeDate = zIncludeDate ' 1 If Including Files Earlier Than A Specified Date
ZOPT.fVerbose = zVerbose ' 1 If Full Messages Wanted
ZOPT.fQuiet = zQuiet ' 1 If Minimum Messages Wanted
ZOPT.fCRLF_LF = zCRLF_LF ' 1 If Translate CR/LF To LF
ZOPT.fLF_CRLF = zLF_CRLF ' 1 If Translate LF To CR/LF
ZOPT.fJunkDir = zJunkDir ' 1 If Junking Directory Names
ZOPT.fGrow = zGrow ' 1 If Allow Appending To Zip File
ZOPT.fForce = zForce ' 1 If Making Entries Using DOS Names
ZOPT.fMove = zMove ' 1 If Deleting Files Added Or Updated
ZOPT.fDeleteEntries = zDelEntries ' 1 If Files Passed Have To Be Deleted
ZOPT.fUpdate = zUpdate ' 1 If Updating Zip File-Overwrite Only If Newer
ZOPT.fFreshen = zFreshen ' 1 If Freshening Zip File-Overwrite Only
ZOPT.fJunkSFX = zJunkSFX ' 1 If Junking SFX Prefix
ZOPT.fLatestTime = zLatestTime ' 1 If Setting Zip File Time To Time Of Latest File In Archive
ZOPT.fComment = zComment ' 1 If Putting Comment In Zip File
ZOPT.fOffsets = zOffsets ' 1 If Updating Archive Offsets For SFX Files
ZOPT.fPrivilege = zPrivilege ' 1 If Not Saving Privelages
ZOPT.fEncryption = zEncryption ' Read Only Property!
ZOPT.fRecurse = zRecurse ' 1 or 2 If Recursing Into Subdirectories
ZOPT.fRepair = zRepair ' 1 = Fix Archive, 2 = Try Harder To Fix
ZOPT.flevel = zLevel ' Compression Level - (0 To 9) Should Be 0!!!
'-- Set ZIP32.DLL Options
retcode = ZpSetOptions(ZOPT)
'-- Go Zip It Them Up!
retcode = ZpArchive(zArgc, zZipFileName, zZipFileNames)
'-- Return The Function Code
VBZip32 = retcode
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -