<
您还没有登录┊登录注册 当前在线:721
源码程序系统工具编程开发图形图像网络软件应用软件多媒体类娱乐休闲驱动程序各类教程各类论文文章阅读
ASPPHPJSPASP.NETVBVF百度搜索星星练题网络文摘股市消息技能习题详细分类
当前位置:首页 \ 源码程序 \ vb代码
站内搜索


用VB6.0自制压缩与解压缩程序

文件大小:1 k
运行平台:Windows9X/ME/NT/2000/XP
级别评定:
添加时间:2010-1-31 23:38:50
最后更新:2010-1-31 23:38:50
相关链接:无
所需金额:0 元
添加者:管理员

Download.1

/ ::软件简介:: / ::相关软件:: / ::软件点评:: /::上一个::/ ::下一个:: /
管理首页
用VB6.0自制压缩与解压缩程序
当我们编写程序时,会常常遇到程序信息内容更新的问题,对于小的文件更新,可以提供给客户自己到网络上下载,但对于大且多的文件,由于网络的原因,通过下载却又不实际,动辄是更新不完整,影响了程序的运行。当时我编写“商务娱乐频道系统”时,也遇到了这样的问题,对于大型的视频及图片文件,我考虑到了使用压缩包提供给客户,但是通过使用压缩程序却不能将我的文件按要求进行解压到其他相应的目录,那时我想到了何不自己制作压缩与解压缩程序呢。解压时将文件解压到程序所要的位置。

为了这个项目,我仔细的研究了VB的安装程序,原来VB是通过系统所自带的资源来进行压缩与解压缩,如MakeCab.exe、vb6stkit.dll等。

其实真真做起来还是挺简单的,就是调用几个API函数便可以搞定。近日,闲着有空,翻看自己的旧程序,故决定将该程序整理出来,与大家共享。

 

下面是具体的程序编写模块,首先你需要建立一个工程(名称由你自己确定了):

1.        添加两个模块,在这里我给它们分别命名为modAPI、modMain;

2.        添加三个窗体,在这里我给它们分别命名为frmMain、frmLogin、frmAddInfo;

3.        以下是各个模块的源代码内容,请先保存该工程,并且关闭,然后转到该工程的文件夹下,按下面的提示进行源代码拷贝;

 

用记事本打开frmMain.frm文件,copy以下内容到其中:

 

VERSION 5.00

Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"

Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"

Begin VB.Form frmMain 

   BorderStyle     =   1  'Fixed Single

   Caption         =   "信息文件更新"

   ClientHeight    =   5385

   ClientLeft      =   45

   ClientTop       =   330

   ClientWidth     =   8550

   ControlBox      =   0   'False

   Icon            =   "frmMain.frx":0000

   LinkTopic       =   "Form1"

   LockControls    =   -1  'True

   MaxButton       =   0   'False

   MinButton       =   0   'False

   ScaleHeight     =   5385

   ScaleWidth      =   8550

   StartUpPosition =   2  '屏幕中心

   Begin VB.CommandButton cmdOk 

      Caption         =   "导出更新列表"

      Height          =   375

      Index           =   3

      Left            =   5385

      TabIndex        =   6

      Top             =   4980

      Width           =   1545

   End

   Begin VB.CommandButton cmdOk 

      Caption         =   "关 闭"

      Height          =   375

      Index           =   2

      Left            =   7620

      TabIndex        =   5

      Top             =   4980

      Width           =   885

   End

   Begin VB.CommandButton cmdOk 

      Caption         =   "打 包"

      Height          =   375

      Index           =   1

      Left            =   3810

      TabIndex        =   1

      Top             =   4980

      Width           =   885

   End

   Begin VB.CommandButton cmdOk 

      Caption         =   "展 开"

      Height          =   375

      Index           =   0

      Left            =   0

      TabIndex        =   0

      Top             =   4980

      Width           =   885

   End

   Begin MSComctlLib.ListView lstInfo 

      Height          =   4275

      Left            =   0

      TabIndex        =   2

      Top             =   330

      Width           =   8505

      _ExtentX        =   15002

      _ExtentY        =   7541

      View            =   3

      Arrange         =   1

      LabelEdit       =   1

      MultiSelect     =   -1  'True

      LabelWrap       =   -1  'True

      HideSelection   =   0   'False

      FullRowSelect   =   -1  'True

      GridLines       =   -1  'True

      _Version        =   393217

      ForeColor       =   -2147483640

      BackColor       =   -2147483643

      BorderStyle     =   1

      Appearance      =   1

      NumItems        =   3

      BeginProperty ColumnHeader(1) {BDD1F052-858B-11D1-B16A-00C0F0283628} 

         Text            =   "序号"

         Object.Width           =   1235

      EndProperty

      BeginProperty ColumnHeader(2) {BDD1F052-858B-11D1-B16A-00C0F0283628} 

         SubItemIndex    =   1

         Text            =   "压缩包文件"

         Object.Width           =   6068

      EndProperty

      BeginProperty ColumnHeader(3) {BDD1F052-858B-11D1-B16A-00C0F0283628} 

         SubItemIndex    =   2

         Text            =   "目标信息"

         Object.Width           =   7832

      EndProperty

   End

   Begin MSComDlg.CommonDialog comdInfo 

      Left            =   0

      Top             =   360

      _ExtentX        =   847

      _ExtentY        =   847

      _Version        =   393216

      CancelError     =   -1  'True

      MaxFileSize     =   30000

   End

   Begin MSComctlLib.ProgressBar PGBar 

      Height          =   345

      Left            =   30

      TabIndex        =   4

      Top             =   4620

      Width           =   8505

      _ExtentX        =   15002

      _ExtentY        =   609

      _Version        =   393216

      Appearance      =   0

      Scrolling       =   1

   End

   Begin VB.Label lblAbout 

      BackStyle       =   0  'Transparent

      Caption         =   "关于本程序..."

      Height          =   255

      Left            =   7260

      TabIndex        =   8

      Top             =   60

      Width           =   1215

   End

   Begin VB.Label lblInfo 

      AutoSize        =   -1  'True

      Caption         =   "请等待,正在创建包信息文件..."

      Height          =   180

      Index           =   1

      Left            =   30

      TabIndex        =   7

      Top             =   4740

      Width           =   4980

   End

   Begin VB.Label lblInfo 

      AutoSize        =   -1  'True

      Caption         =   "展开打包信息更新列表:"

      Height          =   180

      Index           =   0

      Left            =   30

      TabIndex        =   3

      Top             =   30

      Width           =   1980

   End

End

Attribute VB_Name = "frmMain"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

 

 

' ==============================================

' 信息打包与展开 (主窗体模块,即展开窗体)

'

' 功能 :利用系统所存在的资源自作压缩与解压缩程序

'

' 作    者 :谢家峰

' 整理日期 :2004-08-08

' Email    :douhapy@sina.com

'

' ==============================================

'

 

Option Explicit

 

Private Declare Function ExtractFileFromCab Lib "vb6stkit.dll" _

      (ByVal Cab As String, ByVal File As String, ByVal dest As String, _

      ByVal iCab As Long, ByVal sSrc As String) As Long

'说明:

'cab   为系统安装目录下的压缩包

'file  为压缩包内的某文件名称(需在该文件名前加“@”字符)

'dest  为压缩包内的某文件解压后的完全路径名

'icab  为压缩包的数目

'ssrc  临时文件夹,一个有效的文件夹路径

 

Dim s_FileNames() As String     '源文件名(不含路径)

Dim d_FileNames() As String     '目标文件名(含路径)

Dim cab_FileName As String     '包文件名

 

 

Private Sub cmdOK_Click(Index As Integer)

  Dim FileNum As Long

  Dim i As Long

  Dim j As Long

  Dim FileName As String

  

  Select Case Index

    Case 0

        FileName = App.Path & "\更新.ini"

        '查找包文件信息

        s_FileNames = GetFiles(App.Path & "\*.cab_")

        If UBound(s_FileNames) = 0 Then

            MsgBox "当前目录下没找到“商务频道系统文件更新”包文件!", , App.EXEName

            Exit Sub

        End If

        

        If UBound(s_FileNames) > 1 Then

            With comdInfo

                .Filter = "商务 
用记事本打开frmLogin.frm文件,copy以下内容到其中:

 

VERSION 5.00

Begin VB.Form frmLogin 

   BorderStyle     =   3  'Fixed Dialog

   Caption         =   "登录"

   ClientHeight    =   1545

   ClientLeft      =   2835

   ClientTop       =   3480

   ClientWidth     =   3750

   Icon            =   "frmLogin.frx":0000

   LinkTopic       =   "Form1"

   LockControls    =   -1  'True

   MaxButton       =   0   'False

   MinButton       =   0   'False

   ScaleHeight     =   912.837

   ScaleMode       =   0  'User

   ScaleWidth      =   3521.047

   ShowInTaskbar   =   0   'False

   StartUpPosition =   2  '屏幕中心

   Begin VB.TextBox txtUserName 

      Height          =   345

      Left            =   1290

      TabIndex        =   1

      Text            =   "123"

      Top             =   135

      Width           =   2325

   End

   Begin VB.CommandButton cmdOK 

      Caption         =   "确定"

      Default         =   -1  'True

      Height          =   390

      Left            =   495

      TabIndex        =   4

      Top             =   1020

      Width           =   1140

   End

   Begin VB.CommandButton cmdCancel 

      Cancel          =   -1  'True

      Caption         =   "取消"

      Height          =   390

      Left            =   2100

      TabIndex        =   5

      Top             =   1020

      Width           =   1140

   End

   Begin VB.TextBox txtPassword 

      Height          =   345

      IMEMode         =   3  'DISABLE

      Left            =   1290

      PasswordChar    =   "*"

      TabIndex        =   3

      Text            =   "123"

      Top             =   525

      Width           =   2325

   End

   Begin VB.Label lblLabels 

      Caption         =   "用户名称(&U):"

      Height          =   270

      Index           =   0

      Left            =   105

      TabIndex        =   0

      Top             =   150

      Width           =   1080

   End

   Begin VB.Label lblLabels 

      Caption         =   "密码(&P):"

      Height          =   270

      Index           =   1

      Left            =   105

      TabIndex        =   2

      Top             =   540

      Width           =   1080

   End

End

Attribute VB_Name = "frmLogin"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

Option Explicit

 

Public LoginSucceeded As Boolean

 

Private Sub cmdCancel_Click()

    '设置全局变量为 false

    '不提示失败的登录

    LoginSucceeded = False

    Unload Me

End Sub

 

Private Sub cmdOK_Click()

    '检查正确的密码

    If UCase(txtPassword) = "123" And UCase(txtUserName) = "123" Then

         '将代码放在这里传递

         '成功到 calling 函数

         '设置全局变量时最容易的

         LoginSucceeded = True

         Unload Me

         frmAddInfo.Show 1, frmMain

    Else

        MsgBox "无效的用户或密码密码,请重试!", , "登录"

        txtPassword.SetFocus

        SendKeys "{Home}+{End}"

    End If

End Sub

 

用记事本打开frmAddInfo.frm文件,copy以下内容到其中:

 

VERSION 5.00

Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"

Begin VB.Form frmAddInfo 

   BorderStyle     =   3  'Fixed Dialog

   Caption         =   "信息打包"

   ClientHeight    =   5505

   ClientLeft      =   45

   ClientTop       =   330

   ClientWidth     =   8655

   ControlBox      =   0   'False

   Icon            =   "frmAddInfo.frx":0000

   LinkTopic       =   "Form1"

   LockControls    =   -1  'True

   MaxButton       =   0   'False

   MinButton       =   0   'False

   ScaleHeight     =   5505

   ScaleWidth      =   8655

   ShowInTaskbar   =   0   'False

   StartUpPosition =   1  '所有者中心

   Begin VB.TextBox txtEditInfo 

      Height          =   285

      Index           =   3

      Left            =   1530

      TabIndex        =   15

      Tag             =   "商务频道系统文件更新"

      Text            =   "商务频道系统文件更新"

      Top             =   3420

      Width           =   5535

   End

   Begin VB.CommandButton cmdok 

      Caption         =   "导入包列表"

      Height          =   375

      Index           =   2

      Left            =   3930

      TabIndex        =   14

      Top             =   5040

      Width           =   1245

   End

   Begin VB.CommandButton cmdok 

      Caption         =   "关  闭"

      Height          =   375

      Index           =   3

      Left            =   5850

      TabIndex        =   8

      Top             =   5040

      Width           =   1245

   End

   Begin VB.CommandButton cmdok 

      Caption         =   "导出包列表"

      Enabled         =   0   'False

      Height          =   375

      Index           =   1

      Left            =   2010

      TabIndex        =   7

      Top             =   5040

      Width           =   1245

   End

   Begin VB.CommandButton cmdok 

      Caption         =   "信息打包"

      Enabled         =   0   'False

      Height          =   375

      Index           =   0

      Left            =   90

      TabIndex        =   6

      Top             =   5040

      Width           =   1245

   End

   Begin VB.Frame framInfo 

      Caption         =   "编辑命令"

      Height          =   2235

      Index           =   1

      Left            =   7110

      TabIndex        =   2

      Top             =   3270

      Width           =   1545

      Begin VB.CommandButton cmdinfo 

         Caption         =   "删除精选项"

         Enabled         =   0   'False

         Height          =   345

         Index           =   1

         Left            =   60

         TabIndex        =   9

         Top             =   750

         Width           =   1425

      End

      Begin VB.CommandButton cmdinfo 

         Caption         =   "修改信息"

         Enabled         =   0   'False

         Height          =   345

         Index           =   2

         Left            =   60

         TabIndex        =   5

         Top             =   1280

         Width           =   1425

      End

      Begin VB.CommandButton cmdinfo 

         Caption         =   "添加信息"

         Height          =   345

         Index           =   3

         Left            =   60

         TabIndex        =   4

         Top             =   1800

         Width           =   1425

      End

      Begin VB.CommandButton cmdinfo 

         Caption         =   "清空列表"

         Enabled         =   0   'False

         Height          =   345

         Index           =   0

         Left            =   60

         TabIndex        =   3

         Top             =   240

         Width           =   1425

      End

   End

   Begin VB.Frame framInfo 

      Caption         =   "编辑与察看"

      Enabled         =   0   'False

      Height          =   1005

      Index           =   0

      Left            =   60

      TabIndex        =   1

      Tag             =   "编辑与察看"

      Top             =   3900

      Width           =   7035

      Begin VB.TextBox txtEditInfo 

         Height          =   285

         Index           =   1

         Left            =   870

         TabIndex        =   12

         Top             =   660

         Width           =   6105

      End

      Begin VB.TextBox txtEditInfo 

         Height          =   285

         Index           =   0

         Left            =   870

         TabIndex        =   10

         Top             =   270

         Width           =   6105

      End

      Begin VB.Label Label1 

         AutoSize        =   -1  'True

         Caption         =   "目标信息:"

         Height          =   180

         Index           =   1

         Left            =   60

         TabIndex        =   13

         Top             =   660

         Width           =   900

      End

      Begin VB.Label Label1 

         AutoSize        =   -1  'True

         Caption         =   "源信息:"

         Height          =   180

         Index           =   0

         Left            =   90

         TabIndex        =   11

         Top             =   270

         Width           =   720

      End

   End

   Begin MSComctlLib.ListView lstInfo 

      Height          =   3165

      Left            =   60

      TabIndex        =   0

      Top             =   60

      Width           =   8565

      _ExtentX        =   15108

      _ExtentY        =   5583

      View            =   3

      Arrange         =   1

      LabelEdit       =   1

      MultiSelect     =   -1  'True

      LabelWrap       =   -1  'True

      HideSelection   =   0   'False

      FullRowSelect   =   -1  'True

      GridLines       =   -1  'True

      _Version        =   393217

      ForeColor       =   -2147483640

      BackColor       =   -2147483643

      BorderStyle     =   1

      Appearance      =   1

      NumItems        =   3

      BeginProperty ColumnHeader(1) {BDD1F052-858B-11D1-B16A-00C0F0283628} 

         Text            =   "序号"

         Object.Width           =   1235

      EndProperty

      BeginProperty ColumnHeader(2) {BDD1F052-858B-11D1-B16A-00C0F0283628} 

         SubItemIndex    =   1

         Text            =   "源信息"

         Object.Width           =   6068

      EndProperty

      BeginProperty ColumnHeader(3) {BDD1F052-858B-11D1-B16A-00C0F0283628} 

         SubItemIndex    =   2

         Text            =   "目标信息"

         Object.Width           =   7832

      EndProperty

   End

   Begin VB.Label Label1 

      AutoSize        =   -1  'True

      Caption         =   "信息打包名称:"

      Height          =   180

      Index           =   2

      Left            =   60

      TabIndex        =   16

      Top             =   3480

      Width           =   1260

   End

End

Attribute VB_Name = "frmAddInfo"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

 

 

' ===================================================================

' 信息打包与展开 (打包模块,在此对包文件添加信息并进行压缩)

'

' 功能 :利用系统所存在的资源自作压缩与解压缩程序

'

' 作    者 :谢家峰

' 整理日期 :2004-08-08

' Email    :douhapy@sina.com

'

' ===================================================================

'

Option Explicit

 

' --------------------------------------------

' 设置编辑信息框

'

' --------------------------------------------

'

Sub EditLstvInfo(ByVal Item As MSComctlLib.ListItem)

    Dim i As Integer

    

    If Item Is Nothing Then

        For i = 0 To 1

          txtEditInfo(i) = ""

        Next

        

        framInfo(0) = framInfo(0).Tag

        framInfo(0).Enabled = False

        cmdinfo(0).Enabled = False

        cmdinfo(1).Enabled = False

        cmdinfo(2).Enabled = False

        cmdinfo(2).Caption = "修改信息"

        

        cmdOK(0).Enabled = False

        cmdOK(1).Enabled = False

        Exit Sub

    End If

    

    framInfo(0) = "第" & Item.text & "列" & framInfo(0).Tag

    With Item

        txtEditInfo(0) = .SubItems(1)

        txtEditInfo(1) = .SubItems(2)

    End With

    framInfo(0).Enabled = True

    cmdinfo(0).Enabled = True

    cmdinfo(1).Enabled = True

    cmdinfo(2).Enabled = True

    cmdinfo(2).Tag = Item.Index

    cmdinfo(2).Caption = "修改第" & cmdinfo(2).Tag & "行信息"

    

    cmdOK(0).Enabled = True

    cmdOK(1).Enabled = True

End Sub

 

' -------------------------------------------------------------

' ListView控件重新排序,且返回最后一个被精选的项,若没有返回0

'

' -------------------------------------------------------------

'

Function lstInfo_sort() As Long

    Dim i, j As Long

  

    j = 0

    For i = 1 To lstInfo.ListItems.count

        lstInfo.ListItems(i).text = i

        If lstInfo.ListItems(i).Selected Then j = i

    Next

    lstInfo_sort = j

End Function

 

' --------------------------------------------

'检索所添加的信息在ListView控件中是否有重复

'

' --------------------------------------------

'

Function Check_OverLap(infoname As String) As Boolean

    Dim i As Long

    

    With lstInfo.ListItems

        For i = 1 To .count

            If Trim(LCase(.Item(i).SubItems(1))) = Trim(LCase(infoname)) Then

                Check_OverLap = True

                Exit Function

            Else

                Check_OverLap = False

            End If

        Next

    End With

End Function

 

Private Sub cmdinfo_Click(Index As Integer)

    Dim AddFileName() As String

    Dim str As String

    Dim Value As String

    

    Dim i As Long

    Dim j As Long

    Dim selIndex() As Long

  

    Select Case Index

        Case 0   '清除列表

            lstInfo.ListItems.Clear

            EditLstvInfo lstInfo.SelectedItem  '显示精选项

             

        Case 1   '删除精选项

            ReDim selIndex(0): Value = ""

            For i = 1 To lstInfo.ListItems.count

                If lstInfo.ListItems(i).Selected Then

                    ReDim Preserve selIndex(UBound(selIndex) + 1)

                    selIndex(UBound(selIndex)) = i

                    Value = Value & "  " & i

                End If

            Next

            Value = MsgBox("你将删除序号为“" & Trim(Value) & "”的信息!" & vbCrLf & "确定要删除吗?", vbQuestion + vbOKCancel, "警告")

            If Value = vbCancel Then

                Exit Sub

            Else

                Screen.MousePointer = 11

                For i = UBound(selIndex) To 1 Step -1

                    lstInfo.ListItems.Remove selIndex(i)

                Next

                '重新排序

                j = lstInfo_sort

                If j = 0 And lstInfo.ListItems.count <> 0 Then lstInfo.ListItems(lstInfo.ListItems.count).Selected = True

               

                On Error Resume Next

                lstInfo.SelectedItem.EnsureVisible

                EditLstvInfo lstInfo.SelectedItem  '显示精选项

        

                If lstInfo.ListItems.count = 0 Then cmdinfo(2).Enabled = False: cmdinfo(1).Enabled = False

                Screen.MousePointer = 1

            End If

        Case 2   '修改信息

            If Not FileExists(Trim(txtEditInfo(0))) Then

                MsgBox "源信息文件不存在!"

                Exit Sub

            End If

            If Trim(txtEditInfo(1)) = "" Then

                MsgBox "目标信息路径不能为空!"

                Exit Sub

            End If

            If UCase(GetExt(Trim(txtEditInfo(1)))) <> UCase(GetExt(Trim(txtEditInfo(0)))) Then

                MsgBox "目标信息文件扩展名不对!"

                Exit Sub

            End If

            If Not CBool(InStr(1, Trim(txtEditInfo(1)), "C:\", vbTextCompare)) And Not CBool(InStr(1, Trim(txtEditInfo(1)), "D:\", vbTextCompare)) Then

                MsgBox "目标信息路径格式不对!"

                Exit Sub

            End If

            

            With lstInfo.ListItems.Item(CLng(cmdinfo(2).Tag))

                '是否添加重复的主信息

                If Check_OverLap(Trim(txtEditInfo(1))) Then

                    If Trim(.SubItems(2)) = Trim(txtEditInfo(1)) Then

                        MsgBox "信息重复,请重新编辑该项信息!", vbInformation, "警告"

                        Exit Sub

                    End If

                End If

                

                .SubItems(1) = Trim(txtEditInfo(0))

                .SubItems(2) = Trim(txtEditInfo(1))

            End With

             

        Case 3   '添加信息

            With frmMain.comdInfo

                .Filter = "所有可用信息|*.JPG;*.JPEG;*.BMP;*.SWF;*.GIF;*.AVI;*.MPG;*.MPEG;*.DAT;*.inf;*.MP3;*.MID;*.WAV;*.RM|" & _

                         "静态图像(*.JPG;*.JPEG;*.BMP)|*.JPG;*.JPEG;*.BMP|" & _

                         "动态图像(*.SWF;*.GIF;*.AVI;*.MPG;*.MPEG;*.DAT;*.RM)|*.SWF;*.GIF;*.AVI;*.MPG;*.MPEG;*.DAT;*.RM|" & _

                         "音乐(*.MP3;*.MID;*.WAV)|*.MP3;*.MID;*.WAV"

                         

                .DialogTitle = "请选择信息"

                .InitDir = CurDir()

                .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly Or _

                         cdlOFNAllowMultiselect Or cdlOFNExplorer

                .FileName = ""

                On Error GoTo ErrLab

                .ShowOpen

                          

                str = .FileName

                AddFileName() = Split(str, vbNullChar)

                

                '添加信息到列表

                If UBound(AddFileName) = 0 Then '选择了一项信息

                    '不添加重复的主信息

                     If Not Check_OverLap(str) Then

                        lstvInfo_Add lstInfo, 3, False, lstInfo.ListItems.count + 1, str, str

                     End If

                End If

                

                For i = 1 To UBound(AddFileName)  '选择了多项信息

                    str = AddFileName(0) & "\" & AddFileName(i)

                    '不添加重复的主信息

                    If Not Check_OverLap(str) Then

                       lstvInfo_Add lstInfo, 3, False, lstInfo.ListItems.count + 1, str, str

                    End If

                Next

                

                lstInfo.ListItems.Item(lstInfo.ListItems.count).Selected = True

                EditLstvInfo lstInfo.SelectedItem '显示精选项

            End With

        

        Case Else

        

    End Select

    Exit Sub

  

ErrLab:

    If Err.Number = 32755 Then

        Exit Sub

    Else

        Err.Raise Err.Number, , Err.Des cription

        Exit Sub

    End If

End Sub

 

Private Sub cmdOK_Click(Index As Integer)

    Dim resultat As Long

    Dim resultat2 As Long

    Dim res As Double

    Dim startinfo As STARTUPINFO

    Dim procinfo As PROCESS_INFORMATION

    Dim secu As SECURITY_ATTRIBUTES

    Dim i As Long

    

    Dim blInfo As Boolean

    Dim FileName As String

    

    Dim str1 As String

    Dim str2 As String

  

    startinfo.cb = Len(startinfo)

    secu.nLength = Len(secu)

    

    If Trim("" & txtEditInfo(3)) = "" Then

        txtEditInfo(3) = txtEditInfo(3).Tag

    End If

  

    Select Case Index

        Case 0    '信息打包

            ' 检查包信息是否存在

            If FileExists(App.Path & "\" & Trim(txtEditInfo(3)) & ".CAB_") Then

                If MsgBox("当前目录下存在 “" & Trim(txtEditInfo(3)) & ".CAB_” 包文件,是否覆盖?", vbQuestion + vbYesNo) = vbYes Then

                    Kill App.Path & "\" & Trim(txtEditInfo(3)) & ".CAB_"

                Else

                    Exit Sub

                End If

            End If

            

            Screen.MousePointer = 11

            '生成安装列表信息

            FileName = App.Path & "\更新.ini"

            With lstInfo

                WritePrivateProfileString "文件数目", "FileNum", CStr(.ListItems.count), FileName

                For i = 1 To .ListItems.count

                    WritePrivateProfileString "源文件信息", "File" & i, .ListItems(i).SubItems(1), FileName

                    WritePrivateProfileString "目标文件信息", "File" & i, .ListItems(i).SubItems(2), FileName

                Next

                WritePrivateProfileString "打包名称", "BagName", "" & txtEditInfo(3), FileName

            End With

             

            '生成商务.DDF文件,指定打包信息

            str1 = ".Option EXPLICIT" & vbCrLf & _

                 ".Set Cabinet=off" & vbCrLf & _

                 ".Set Compress=off" & vbCrLf & _

                 ".Set MaxDiskSize = CDROM" & vbCrLf & _

                 ".Set ReservePerCabinetSize = 6144" & vbCrLf & _

                 ".Set DiskDirectoryTemplate=" & vbCrLf & _

                 ".Set CompressionType = MSZIP" & vbCrLf & _

                 ".Set CompressionLevel = 7" & vbCrLf & _

                 ".Set CompressionMemory = 21" & vbCrLf & _

                 ".Set CabinetNameTemplate =" & Chr(34) & Trim(txtEditInfo(3)) & ".CAB_" & Chr(34) & vbCrLf & _

                 ".Set Cabinet=on" & vbCrLf & _

                 ".Set Compress=on" & vbCrLf

            For i = 1 To lstInfo.ListItems.count

                str1 = str1 & Chr(34) & lstInfo.ListItems(i).SubItems(1) & Chr(34) & vbCrLf

            Next

            

            str1 = str1 & Chr(34) & FileName & Chr(34)                              '追加展开列表信息到包中

            WriteTextFileContents str1, App.Path & "\商务.DDF"

            

            '启动打包程序

            resultat = CreateProcess(vbNullString, WindowsSysPath & "\makecab.exe /f 商务.DDF", secu, secu, _

                        0, 0, 0, App.Path, startinfo, procinfo)

            resultat2 = WaitForSingleObject(procinfo.hProcess, INFINITE)

            resultat2 = CloseHandle(procinfo.hProcess)

             '

            DoEvents

            '删除不必要的信息

            If FileExists(App.Path & "\商务.DDF") Then Kill App.Path & "\商务.DDF"

            If FileExists(App.Path & "\更新.ini") Then Kill App.Path & "\更新.ini"

            If FileExists(App.Path & "\setup.inf") Then Kill App.Path & "\setup.inf"

            If FileExists(App.Path & "\setup.rpt") Then Kill App.Path & "\setup.rpt"

            DoEvents

            

            MsgBox "压缩包已生成!返回主窗体通过“展开”按钮将相应的信息文件展开到相应的目录中!" & vbCrLf & _

                    "文件列表已被导出在“" & FileName & "”中,若要编辑当前的信息,请在打包窗体中提取该信息文件!", , App.EXEName

            Screen.MousePointer = 1

            Unload Me

            

        Case 1    '导出包列表

            With frmMain.comdInfo

                .Filter = "更新列表信息|*.TLB"

                         

                .DialogTitle = "导出包列表信息文件"

                .InitDir = CurDir()

                .Flags = cdlOFNHideReadOnly

                         

                .FileName = txtEditInfo(3) & ".TLB"

                On Error GoTo ErrLab

                .ShowSave

                                    

                FileName = .FileName

                If FileExists(FileName) Then

                    SetAttr FileName, vbNormal

                    Kill FileName

                End If

                

                '导出信息

                With lstInfo

                    WritePrivateProfileString "文件数目", "FileNum", CStr(.ListItems.count), FileName

                    For i = 1 To .ListItems.count

                        WritePrivateProfileString "源文件信息", "File" & i, .ListItems(i).SubItems(1), FileName

                        WritePrivateProfileString "目标文件信息", "File" & i, .ListItems(i).SubItems(2), FileName

                    Next

                    

                    WritePrivateProfileString "打包名称", "BagName", "" & txtEditInfo(3), FileName

                End With

            End With

            MsgBox "信息列表被导出在“" & FileName & "”文件中!", , App.EXEName

             

        Case 2    '导入包列表

            If lstInfo.ListItems.count <> 0 Then

                resultat = MsgBox("要保存当前的更新列表信息吗?", vbQuestion + vbOKCancel, App.EXEName)

                If resultat = vbOK Then

                    cmdOK_Click 1

                End If

            End If

            

            With frmMain.comdInfo

                .Filter = "更新列表信息|*.TLB"

                         

                .DialogTitle = "选择导入包列表信息文件"

                .InitDir = CurDir()

                .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly

                         

                .FileName = txtEditInfo(3).Tag

                On Error GoTo ErrLab

                .ShowOpen

                          

                FileName = .FileName

                On Error GoTo 0

                '导入信息

                With lstInfo

                    .ListItems.Clear

                    resultat = CLng(ReadIniFile(FileName, "文件数目", "FileNum"))

                    If resultat = 0 Then

                        MsgBox "文件“" & FileName & "”没有信息,或不正确!", , App.EXEName

                        Exit Sub

                    End If

                    

                    

                    txtEditInfo(3) = ReadIniFile(FileName, "打包名称", "BagName")

                    

                    For i = 1 To resultat

                        '不添加重复的主信息

                        str1 = ReadIniFile(FileName, "源文件信息", "File" & i)

                        str2 = ReadIniFile(FileName, "目标文件信息", "File" & i)

                        lstvInfo_Add lstInfo, 3, False, lstInfo.ListItems.count + 1, str1, str2

                    Next

                    .ListItems(i - 1).Selected = True

                    EditLstvInfo .SelectedItem

                End With

            End With

 

           Case 3    '关闭

                Unload Me

    End Select

    Exit Sub

  

ErrLab:

    If Err.Number = 32755 Then

        Exit Sub

    Else

        Err.Raise Err.Number, , Err.Des cription

        Exit Sub

    End If

End Sub

 

Private Sub lstInfo_ItemClick(ByVal Item As MSComctlLib.ListItem)

    EditLstvInfo Item

End Sub

 

Private Sub lstInfo_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

    Dim ItemInfo As MSComctlLib.ListItem

    

    Set ItemInfo = lstInfo.HitTest(x, y)

    If Not (ItemInfo Is Nothing) Then

        lstInfo.ToolTipText = "[第" & Trim(ItemInfo) & "列]  源信息:" & Trim(ItemInfo.SubItems(1)) & _

                              "  目标信息:" & Trim(ItemInfo.SubItems(2))

    Else

        lstInfo.ToolTipText = ""

    End If

    Set ItemInfo = Nothing

End Sub

 

Private Sub txtEditInfo_MouseMove(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)

    txtEditInfo(Index).ToolTipText = Trim(txtEditInfo(Index))

End Sub

 
用记事本打开modMain.bas文件,copy以下内容到其中:

 

Attribute VB_Name = "modMain"

 

' ==============================================

' 信息打包与展开 (启动模块)

'

' 功能 :利用系统所存在的资源自作压缩与解压缩程序

'

' 作    者 :谢家峰

' 整理日期 :2004-08-08

' Email    :douhapy@sina.com

'

' ==============================================

'

Option Explicit

 

Public WindowsPath As String

Public WindowsSysPath As String

 

Sub Main()

  Dim BootTrapPath As String

  Dim SetupFilePath As String

  Dim regExeFilePath As String

  

  Dim regInfo() As String

  Dim regStr() As String

  Dim regFileName As String

  Dim str As String

    

  Dim resultat As Long

  Dim resultat2 As Long

  Dim res As Double

  Dim startinfo As STARTUPINFO

  Dim procinfo As PROCESS_INFORMATION

  Dim secu As SECURITY_ATTRIBUTES

  

  Dim i As Integer

  

  If App.PrevInstance Then MsgBox "系统已启动!", , App.EXEName: End

  '获得系统安装目录

  WindowsPath = GetWindowsDir

  WindowsSysPath = GetWindowsSysDir

  

  Load frmMain

  frmMain.Show

End Sub

 

用记事本打开modAPI.bas文件,copy以下内容到其中:

 

Attribute VB_Name = "modAPI"

 

' ==============================================

' 信息打包与展开 (所调用的API及通用函数模块)

'

' 功能 :利用系统所存在的资源自作压缩与解压缩程序

'

' 作    者 :谢家峰

' 整理日期 :2004-08-08

' Email    :douhapy@sina.com

'

' ==============================================

'

Option Explicit

 

Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

 

Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

 

Public Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpbuffer As String, ByVal nSize As Long) As Long

Public Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpbuffer As String, ByVal nSize As Long) As Long

 

Public Const gstrSEP_DIR$ = "\"

Public Const gstrSEP_URLDIR$ = "/"

Public Const gintMAX_SIZE% = 255

 

Public Const INFINITE = &HFFFF

 

Public Type STARTUPINFO

    cb As Long

    lpReserved As String

    lpDesktop As String

    lpTitle As String

    dwX As Long

    dwY As Long

    dwXSize As Long

    dwYSize As Long

    dwXCountChars As Long

    dwYCountChars As Long

    dwFillAttribute As Long

    dwFlags As Long

    wShowWindow As Integer

    cbReserved2 As Integer

    lpReserved2 As Long

    hStdInput As Long

    hStdOutput As Long

    hStdError As Long

End Type

 

Public Type PROCESS_INFORMATION

    hProcess As Long

    hThread As Long

    dwProcessId As Long

    dwThreadId As Long

End Type

 

Public Type SECURITY_ATTRIBUTES

    nLength As Long

    lpSecurityDes criptor As Long

    bInheritHandle As Long

End Type

 

 

Function StripTerminator(ByVal strString As String) As String

    Dim intZeroPos As Integer

 

    intZeroPos = InStr(strString, Chr$(0))

    If intZeroPos > 0 Then

        StripTerminator = Left$(strString, intZeroPos - 1)

    Else

        StripTerminator = strString

    End If

End Function

 

' -----------------------------------------------------------

' 给目录添加分割线

'

' -----------------------------------------------------------

'

Sub AddDirSep(strPathName As String)

    If Right(Trim(strPathName), Len(gstrSEP_URLDIR)) <> gstrSEP_URLDIR And _

       Right(Trim(strPathName), Len(gstrSEP_DIR)) <> gstrSEP_DIR Then

        strPathName = RTrim$(strPathName) & gstrSEP_DIR

    End If

End Sub

 

' -----------------------------------------------------------

' 调用API函数获得Windows的系统目录

'

' -----------------------------------------------------------

'

Function GetWindowsSysDir() As String

    Dim strBuf As String

 

    strBuf = Space$(gintMAX_SIZE)

    If GetSystemDirectory(strBuf, gintMAX_SIZE) > 0 Then

        strBuf = StripTerminator(strBuf)

        AddDirSep strBuf

        

        GetWindowsSysDir = strBuf

    Else

        GetWindowsSysDir = vbNullString

    End If

End Function

 

' -----------------------------------------------------------

' 调用API函数获取Windows目录

'

' -----------------------------------------------------------

'

Function GetWindowsDir() As String

    Dim strBuf As String

 

    strBuf = Space$(gintMAX_SIZE)

 

    If GetWindowsDirectory(strBuf, gintMAX_SIZE) > 0 Then

        strBuf = StripTerminator$(strBuf)

        AddDirSep strBuf

 

        GetWindowsDir = strBuf

    Else

        GetWindowsDir = vbNullString

    End If

End Function

 

' --------------------------------------

' 测试目录是否存在

'

' --------------------------------------

'

Public Function DirExists(Path As String) As Boolean

    On Error Resume Next

    

    '对于网络地址采用*.*形式

    If InStr(Path, "\\") Then

        DirExists = (Dir$(Path & "\*.*") <> "")

    Else

        DirExists = (Dir$(Path & "\nul") <> "")

    End If

End Function

 

' --------------------------------------

' 建立文件夹(含多层结构)

'

' --------------------------------------

'

Public Sub CreateFloder(floder As String)

    Dim i As Integer

    Dim Path As String

    Dim FloderStr() As String

    

    On Error Resume Next

    FloderStr = Split(floder, "\")

    Path = FloderStr(0)

    For i = 1 To UBound(FloderStr) - 1

        Path = Path & "\" & FloderStr(i)

        If Not DirExists(Path) Then

           MkDir Path

        End If

    Next

End Sub

 

' --------------------------------------

' 获得长文件名的短文件名

'

' --------------------------------------

'

Function GetShortFileName(FileName As String) As String

    Dim str As String

    str = String(LenB(FileName), Chr(0))

    

    If GetShortPathName(FileName, str, LenB(FileName)) <> 0 Then

        str = Left(str, InStr(str, vbNullChar) - 1)

        If str = "" Then

            GetShortFileName = FileName

        Else

            GetShortFileName = str

        End If

    Else

        GetShortFileName = FileName

    End If

End Function

 

' --------------------------------------

' 获得文件名

'

' --------------------------------------

'

Public Function GetFileName(fileNamePath As String) As String

    Dim AuxVar() As String

    

    AuxVar() = Split(fileNamePath, "\", , vbTextCompare)

    GetFileName = AuxVar(UBound(AuxVar))

End Function

 

' --------------------------------------

' 获得文件的扩展名

'

' --------------------------------------

'

Public Function GetExt(FileName As String) As String

    Dim AuxVar() As String

    

    On Error Resume Next

    AuxVar() = Split(FileName, "\", , vbTextCompare)

    AuxVar() = Split(AuxVar(UBound(AuxVar)), ".", , vbTextCompare)

    GetExt = AuxVar(UBound(AuxVar))

End Function

 

' --------------------------------------

' 测试文件是否存在(不能测试隐含文件和系统文件)

'

' --------------------------------------

'

Public Function FileExists(FileName As String) As Boolean

  On Error Resume Next

  FileExists = (Dir$(FileName) <> "")

End Function

 

' --------------------------------------

' 查找文件

'

' --------------------------------------

'

Function GetFiles(filespec As String, Optional Attributes As VbFileAttribute) As String()

    Dim result() As String

    Dim FileName As String, count As Long, path2 As String

    Const ALLOC_CHUNK = 50

    

    ReDim result(0 To ALLOC_CHUNK) As String

    FileName = Dir$(filespec, Attributes)

    Do While Len(FileName)

        count = count + 1

        If count > UBound(result) Then

            ReDim Preserve result(0 To count + ALLOC_CHUNK) As String

        End If

        result(count) = FileName

        FileName = Dir$

    Loop

    

    ReDim Preserve result(0 To count) As String

    GetFiles = result

 

End Function

 

' --------------------------------------

' 转换字符串

'

' --------------------------------------

'

Public Function StringFromBuffer(buffer As String) As String

    Dim nPos As Long

 

    nPos = InStr(buffer, vbNullChar)

    If nPos > 0 Then

        StringFromBuffer = Left$(buffer, nPos - 1)

    Else

        StringFromBuffer = buffer

    End If

End Function

 

' --------------------------------------

' 写内容到文本文件中

'

' --------------------------------------

'

Sub WriteTextFileContents(text As String, FileName As String, Optional AppendMode As Boolean)

  Dim fnum As Integer, isOpen As Boolean

 

    On Error GoTo Error_Handler

    fnum = FreeFile()

    If AppendMode Then

       Open FileName For Append As #fnum

    Else

       Open FileName For Output As #fnum

    End If

    isOpen = True

    Print #fnum, text

Error_Handler:

    If isOpen Then Close #fnum

    If Err Then Err.Raise Err.Number, , Err.Des cription

End Sub

 

' --------------------------------------

' 读信息到Ini文件中

'

' --------------------------------------

'

Public Function ReadIniFile(ByVal strIniFile As String, ByVal strSection As String, ByVal strKey As String) As String

    Dim strBuffer As String * 255

 

    If GetPrivateProfileString(strSection, strKey, vbNullString, strBuffer, 255, strIniFile) Then

        ReadIniFile = StringFromBuffer(strBuffer)

    End If

End Function

 

' --------------------------------------

' 添加信息到ListView控件中

'

' --------------------------------------

'

Sub lstvInfo_Add(LstVControl As ListView, InfoNum As Integer, SelectedFlag As Boolean, ParamArray InfoStr())

    Dim i As Integer

    

    With LstVControl

        .ListItems.Add , , Trim(InfoStr(0))

        If SelectedFlag Then

            .ListItems(.ListItems.count).Selected = True

        Else

            .ListItems(.ListItems.count).Selected = False

        End If

        

        For i = 2 To InfoNum

            .ListItems(.ListItems.count).ListSubItems.Add , , Trim(InfoStr(i - 1))

        Next

        .ListItems(.ListItems.count).EnsureVisible

    End With

End Sub

     自此,代码Copy完成,这时你再打开工程,编译运行。

1.               信息打包:在frmMain窗体中点击“打包”,直至打开frmAddInfo窗体,在其中点击“添加信息”进行信息添加项,同时,你也可以修改目标信息的路径及文件(说明修改完成后,别忘了点击“修改信息”信息按钮噢),你也可以给你的压缩包修改一个名字。最后点击“信息打包”按钮,进行打包;

2.               信息包展开:打包完成,你可以通过frmMain窗体中的展开程序进行压缩包展开,该展开形式对于存在的文件将覆盖,你可以修给代码,使之符合你自己的要求;

3.               你可以将你的压缩和该程序一同发给你的客户,这样,客户通过展开按钮便可以给你的程序进行信息更新了;

4.               你也可以将这些代码变通形式内嵌在你的程序中,通过文件关联,直接打开你的包文件,这样会更有趣;

5.               若你是Dephi或C++程序员,我相信你看了代码后,用你的方式做起来会更简单。

 

J 若仍不明白,或需求源代码,请来信告诉我,请来信告诉我,我会尽量满足你的要求!

相关软件
·Visual Basic 6.0 简体中文企业版纯净版 
·VBlog_博客系统1.0
·阳光企业管理系统Vbaidu.0825
·宽带连接快速生成器VB源码
·网易邮箱登录vb程序126、163双向开通
·163和126邮箱登陆代码的VB代码
·动网论坛Dvbbs v8.2.0 Build 20090622
·动网论坛Dvbbs v8.2.0 Build 20081021
·动网论坛Dvbbs v8.2
·动网论坛Dvbbs8.2.0RC1万能通行证


1分 0
2分 0
3分 0
4分 0
5分 0
共有 0 人打分
平均得分:0


按字符查询:ABCDEFGHIJKLMNOPQRSTUVWXYZ0~9中文
下载图示: - 附汉化补丁 - 附注册 - 会员软件 - 推荐 - 最新添加
Rainight, 星旺坡 联网备案号:41092802000212 豫ICP备19032584号-1 页面执行时间: 0.28秒
业务QQ:80571569 手机:13030322310