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 注释:自定义函数取得系统的 Winddows\System 的目录 TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组 FileNum = FreeFile Open TempDir & "\nsck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下) Put #FileNum, , TempFile Close #FileNum 注释:Shell "regsvr32 " & TempDir & "\nsck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话框 Shell "regsvr32 " & TempDir & "\nsck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话框 MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件" Unload Me End Sub Public Function GetWinSysDir() 注释:定义读取Winddows\System 的所在目录的函数 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,就不会有任何的错误了,一个变通的“绿色”软件就完成了。