Jim Niezgoda
October 11th, 2001, 02:27 PM
Is there any way to create a .ZIP file in VB or C++
Thanks,
Jim
Thanks,
Jim
|
Click to See Complete Forum and Search --> : ZIPPING Jim Niezgoda October 11th, 2001, 02:27 PM Is there any way to create a .ZIP file in VB or C++ Thanks, Jim Iouri October 11th, 2001, 02:35 PM 'frmZipping Private Sub Command1_Click() With Options .ActionToDo = Add .Compression = eXtra .FilesToAdd = AddHiddenSystem .Options = Recurse_Directories .IfFileAlreadyExists = AlwaysOverwrite End With Call AddFilesToZip(txtSourceDir, txtDestFile) End Sub 'module - mdlAddToZip Public SetToHide As Boolean Private Enum CheckDirOrFile IsDirectory = 1 IsFilename = 2 End Enum Public Function AddFilesToZip(strSourceDir As String, strDestFile As String, Optional LocationOfWinZip As String) As String Dim ProcessIsReady As Boolean Dim CheckFile As Boolean Dim CheckName As String Dim HwndOfWinzip As Integer Dim GetPercentDone As Byte CheckFile = FileExists(strDestFile, IsFilename) With Options If CheckFile = True Then Select Case .IfFileAlreadyExists Case 0: GoTo QuitZipProcess '(Default) NotOverwrite Case 1: Kill strDestFile 'AlwaysOverwrite Case 2: GoTo QuitZipProcess 'NotOverwrite Case Else: GoTo QuitZipProcess '(Default) NotOverwrite End Select End If End With CheckFile = FileExists(strSourceDir, IsDirectory) If CheckFile = False Then MsgBox "Deze directory bestaat niet" Else Call RunWinZip(strSourceDir, strDestFile) CheckName = CheckNameToFind(strDestFile) HwndOfWinzip = FindHwndOfWinzip("WinZip - " & CheckName) Do Until ProcessIsReady = True GetPercentDone = GetPercentComplete(HwndOfWinzip) frmZipping.ProgressBar1.Value = GetPercentDone frmZipping.ProgressBar1.Refresh ProcessIsReady = CheckWinzipProcess DoEvents Loop End If Exit Function QuitZipProcess: MsgBox "Het ZIP process is afgebroken" End Function Private Function RunWinZip(strSourceDir As String, strDestFile As String, Optional LocationOfWinZip As String, Optional Options As String) As Integer Dim CommandLine As String CommandLine = GetOptions If Trim(LocationOfWinZip) = "" Then Shell "C:\program Files\Winzip\Winzip32.exe" & CommandLine & strDestFile & " " & strSourceDir & "\*.*", vbHide Else Shell LocationOfWinZip & CommandLine & strDestFile & " " & strSourceDir & "\*.*", vbHide End If End Function Private Function FindHwndOfWinzip(strNameToFind As String) As Integer Dim i As Integer Dim FindHWND As Integer Call DoEnumWindows For i = 1 To InsertWindowInfo.ItemsInArray FindHWND = InStr(LCase(InsertWindowInfo.GetWindowName(i)), LCase(strNameToFind)) If FindHWND <> 0 Then GetWinZipHwnd = InsertWindowInfo.GetHWND(i) Call EnumChildWindows(GetWinZipHwnd, AddressOf WndEnumChildProc, Nothing) FindHwndOfWinzip = GetProgressHwnd End If Next i End Function Private Function GetPercentComplete(HwndToTrack As Integer) As Byte Dim CheckPercentComplete As Byte CheckPercentComplete = SendMessage(GetProgressHwnd, PBM_GETPOS, 0, ByVal 0) If CheckPercentComplete > 20 Then If SetToHide = False Then Call MoveWindowToHidePos SetToHide = True GetPercentComplete = CheckPercentComplete DoEvents Else GetPercentComplete = CheckPercentComplete DoEvents End If Else GetPercentComplete = CheckPercentComplete DoEvents End If End Function Private Sub MoveWindowToHidePos() Dim GetResX As Integer Dim GetResY As Integer GetResX = Screen.Width \ Screen.TwipsPerPixelX GetResY = Screen.Height \ Screen.TwipsPerPixelY Call MoveWindow(GetWinZipHwnd, GetResX + 1000, GetResY + 1000, 0, 0, 1) Call ShowWindow(GetWinZipHwnd, SW_SHOW) End Sub Private Function GetOptions() As String Dim MakeCmdLine As String With Options Select Case .ActionToDo Case 0, 1: MakeCmdLine = "-a" 'Add / -a Case 2: MakeCmdLine = "-f" 'Freshen / -f Case 3: MakeCmdLine = "-u" 'Update / u Case 4: MakeCmdLine = "-m" 'Move / -m Case Else: MakeCmdLine = "-a" 'Add / -a End Select Select Case .Compression Case 0: MakeCmdLine = MakeCmdLine & " -en" '(Default) Normal / -en Case 1: MakeCmdLine = MakeCmdLine & " -ex" 'Extra / -ex Case 2: MakeCmdLine = MakeCmdLine & " -en" 'Normal / -en Case 3: MakeCmdLine = MakeCmdLine & " -ef" 'Fast / -ef Case 4: MakeCmdLine = MakeCmdLine & " -es" 'Super fast / -es Case 5: MakeCmdLine = MakeCmdLine & " -e0" 'No compression / -e0 Case Else: MakeCmdLine = MakeCmdLine & " -en" '(Default) Normal / -en End Select Select Case .FilesToAdd Case 0, 1: MakeCmdLine = MakeCmdLine & " -hs" 'AddHiddenSystem / -hs Case Else: MakeCmdLine = MakeCmdLine & " -hs" '(Default) AddHiddenSystem / -hs End Select Select Case .Options Case 0: MakeCmdLine = MakeCmdLine & " -r" '(Default) Recurse_Directories / -r Case 1: MakeCmdLine = MakeCmdLine & " -r" 'Recurse_Directories / -r Case 2: MakeCmdLine = MakeCmdLine & " -p" 'Save_Extra_Directory_Info / -p Case Else: MakeCmdLine = MakeCmdLine & " -r" '(Default) Recurse_Directories / -r End Select Select Case .PassWord Case 0: 'Nothing - No protection Case 1: MakeCmdLine = MakeCmdLine & " -s" 'Password protection / -s Case Else: 'Nothing - No protection End Select End With GetOptions = " " & MakeCmdLine & " " End Function Private Function CheckWinzipProcess() As Boolean Dim strNameOfWinzip As String strNameOfWinzip = GetWindowName(GetWinZipHwnd) If Trim(strNameOfWinzip) <> "" Then CheckWinzipProcess = False DoEvents Else CheckWinzipProcess = True DoEvents End If End Function Private Function FileExists(Filename, WhatToCheck As CheckDirOrFile) As Boolean Select Case WhatToCheck Case 1: If Right(Filename, 1) <> "\" Then Filename = Filename & "\" FileExists = (Dir(Filename) <> "") End If Case 2: FileExists = (Dir(Filename) <> "") End Select End Function Private Function CheckNameToFind(NameToCheck As String) As String If Mid(NameToCheck, 2, 2) = ":\" Then CheckNameToFind = Trim(Mid(NameToCheck, 4)) End If End Function 'module - mdlEnumWindows Private Declare Function EnumWindows Lib "User32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Private Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function GetClassName Lib "User32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Public Declare Function EnumChildWindows Lib "User32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Any) As Long Public GetProgressHwnd As Long Public GetWinZipHwnd As Long Public InsertWindowInfo As GetWindowInfo Private Type GetWindowInfo GetHWND(1 To 1000) As Integer GetWindowName(1 To 1000) As String ItemsInArray As Integer End Type Public Sub DoEnumWindows() Call EnumWindows(AddressOf EnumWindowProc, &H0) End Sub Private Function EnumWindowProc(ByVal hwnd As Long, ToListbox As ListBox) As Long Dim strWindowName As String Dim strClassName As String strWindowName = GetWindowName(hwnd) With InsertWindowInfo .ItemsInArray = .ItemsInArray + 1 .GetHWND(.ItemsInArray) = CInt(hwnd) .GetWindowName(.ItemsInArray) = strWindowName End With EnumWindowProc = 1 'Zorgt ervoor dat Enumwindows door blijft gaan totdat er geen HWND's meer zijn End Function Public Function GetWindowName(Handle As Long) As String Dim intWindowLenght As Integer Dim strWindowName As String intWindowLenght = GetWindowTextLength(Handle) + 1 strWindowName = Space$(intWindowLenght) GetWindowText Handle, strWindowName, intWindowLenght ' API function call strWindowName = Mid(strWindowName, 1, Len(strWindowName) - 1) GetWindowName = strWindowName End Function Public Function WndEnumChildProc(ByVal hwnd As Long) As Long Dim bRet As Long Dim myStr As String * 50 Dim FindClass As Integer bRet = GetClassName(hwnd, myStr, 50) FindClass = InStr(LCase(myStr), "msctls_progress32") If FindClass <> 0 Then GetProgressHwnd = hwnd Else WndEnumChildProc = 1 End If End Function 'module - mdlWindowProp Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, wParam As Any, lParam As Any) As Long Public Declare Function MoveWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long Public Declare Function ShowWindow Lib "User32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long 'Hoort bij ShowWindow Public Const SW_HIDE = 0 'Hide the window. Public Const SW_MAXIMIZE = 3 'Maximize the window. Public Const SW_MINIMIZE = 6 'Minimize the window. Public Const SW_RESTORE = 9 'Restore the window (not maximized nor minimized). Public Const SW_SHOW = 5 'Show the window. Public Const SW_SHOWMAXIMIZED = 3 'Show the window maximized. Public Const SW_SHOWMINIMIZED = 2 'Show the window minimized. Public Const SW_SHOWMINNOACTIVE = 7 'Show the window minimized but do not activate it. Public Const SW_SHOWNA = 8 'Show the window in its current state but do not activate it. Public Const SW_SHOWNOACTIVATE = 4 'Show the window in its most recent size and position but do not activate it. Public Const SW_SHOWNORMAL = 1 'Show the window and activate it (as usual). 'Hoort bij SendMessage Public Const PBM_STEPIT = 1029 Public Const WM_USER = &H400 Public Const PBM_GETPOS = (WM_USER + 8) 'module - mdlZipOptions Public Options As ZipOptions Public Type ZipOptions ActionToDo As ActionZIP Options As OptionsZIP Compression As CompressionZIP PassWord As String FilesToAdd As FilesToAddZIP IfFileAlreadyExists As IfFileExists End Type Public Enum ActionZIP Add = 1 'Add to archive Freshen = 2 'Freshen archive Update = 3 'Update archive Move = 4 'Move to archive End Enum Public Enum OptionsZIP Recurse_Directories = 1 'Recurse Directories Save_Extra_Directory_Info = 2 'Save Extra Directory Info End Enum Public Enum CompressionZIP eXtra = 1 'Extra Normal = 2 'Normal Fast = 3 'Fast Super_Fast = 4 'Super fast No_Compression = 5 'No compression End Enum Public Enum PassWordZIP PassWord = 1 'Password protection. End Enum Public Enum FilesToAddZIP AddHiddenSystem = 1 'Add also hidden and system files to archive DoNotAddHiddenSystem = 1 End Enum Public Enum IfFileExists AlwaysOverwrite = 1 NotOverwrite = 2 End Enum Iouri Boutchkine iouri@hotsheet.com codeguru.com
Copyright Internet.com Inc., All Rights Reserved. |