020-29133788
    资 讯
    您的位置:首页 >> 资 讯 >> 软件应用 >> 编程开发 >> 正文
    利用vb实现绿色软件制作

    点击:   发布日期:2012-12-24

    本文来自 www.020fix.com
    作者:szyicol 责任编辑:moningfeng

      现在非常流行“绿色”软件,不需要什么装设程序只要一个 EXE 文件就可以运行程序了,而在 VB 的程序设计中有许多地方需要调用第三

    方的控件(很难用 API 函数搞定所有的功能),这就需要制做一个装设程序,把所需要的控件、DLL 文件或其他文件打包进去了,那么在 VB

    中怎么用变通的方法实现“绿色”软件呢,请看示例:

    1、主程序.EXE

      用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有装设VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按

    一般的方法,只有把这个程序用VB5.0、6.0 的装设程序进行打包,不然只有用用2的方法来解决了。

    2、注册程序.EXE

      用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,透过API函数

    GetSystemDirectory取得系统的WinddowsSystem的目录,然后把Winsock控件複制到该目录下,并用Shell来完成控件的注册。

      启动 VB6.0,在“外接程序→外接过程管理器”中加载“Visual Basic 6 资源编辑器”

      在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:WinddowsSystem
    sck.ocx),再连续按两下刚刚创建

    的自定义资源,弹出”编辑属性”窗口,定义如下:
      类型: “OCX”
      标识号: 101
      语言: 中文(中国)

      保存资源文件,写如下代码:
      Option Explicit
      Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal

    nSize As Long) As Long
      Const MAX_PATH = 260 注释:定义足够长的字元串
      Private Sub Form_Load()
      Dim TempFile() As Byte
      Dim FileNum As Integer
      Dim TempDir As String
      TempDir = GetWinSysDir 注释:自定义函数取得系统的 WinddowsSystem 的目录
      TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组
      FileNum = FreeFile
      Open TempDir & "
    sck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件複制到指定目录下)
      Put #FileNum, , TempFile
      Close #FileNum

      注释:Shell "regsvr32 " & TempDir & "
    sck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话方块
    Shell "regsvr32 " & TempDir & "
    sck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话方块

      MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件"

      Unload Me
     End Sub

      Public Function GetWinSysDir() 注释:定义读取WinddowsSystem 的所在目录的函数
      Dim S As String, Length As Long
      S = String(MAX_PATH, 0) 注释:赋值
      Length = GetSystemDirectory(S, MAX_PATH) 注释:S为取得目录,MAX_PATH 为长度
      S = Left(S, InStr(S, Chr(0)) - 1) 注释:去掉多馀的空格
      GetWinSysDir = S
     End Function

    注释:补充:S 和 MAX_PATH 的值是可以随便赋的,
    注释:如: Dim S As String * 20
    注释: Length = GetSystemDirectory(S, 20)

    3、补充说明
      在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序

    ,在 Win98、2000 下不需要任何 DLL 文件)

    4、程序运行
      将主程序.EXE、注册文件.EXE两个文件,複制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何

    的错误了,一个变通的“绿色”软件就完成了。