home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 February / Chip_2002-02_cd1.bin / zkuste / vbasic / Data / Utility / RegWiz.exe / Dev / RegWiz / RegWiz.frm (.txt) < prev    next >
Visual Basic Form  |  2000-01-27  |  12KB  |  308 lines

  1. VERSION 5.00
  2. Begin VB.Form frmRegWiz 
  3.    Caption         =   "Registration Wizard"
  4.    ClientHeight    =   3975
  5.    ClientLeft      =   60
  6.    ClientTop       =   345
  7.    ClientWidth     =   4935
  8.    LinkTopic       =   "Form1"
  9.    ScaleHeight     =   3975
  10.    ScaleWidth      =   4935
  11.    StartUpPosition =   3  'Windows Default
  12.    Begin VB.CommandButton cmdUnReg 
  13.       Caption         =   "&UnRegister"
  14.       Height          =   315
  15.       Left            =   3900
  16.       TabIndex        =   7
  17.       Top             =   3600
  18.       Width           =   975
  19.    End
  20.    Begin VB.CheckBox chkRecurse 
  21.       Caption         =   "R&ecurse into Sub-Directories"
  22.       Height          =   195
  23.       Left            =   1320
  24.       TabIndex        =   6
  25.       Top             =   3660
  26.       Width           =   2475
  27.    End
  28.    Begin VB.TextBox txtFilter 
  29.       Height          =   285
  30.       Left            =   840
  31.       TabIndex        =   2
  32.       Text            =   "Ocx,Exe,Dll,Tlb"
  33.       Top             =   420
  34.       Width           =   2955
  35.    End
  36.    Begin VB.CommandButton cmdReg 
  37.       Caption         =   "&Register"
  38.       Height          =   315
  39.       Left            =   3900
  40.       TabIndex        =   5
  41.       Top             =   3600
  42.       Width           =   975
  43.    End
  44.    Begin VB.TextBox txtDir 
  45.       BackColor       =   &H8000000F&
  46.       Height          =   285
  47.       Left            =   840
  48.       Locked          =   -1  'True
  49.       TabIndex        =   0
  50.       TabStop         =   0   'False
  51.       Text            =   "Text1"
  52.       Top             =   60
  53.       Width           =   4035
  54.    End
  55.    Begin VB.TextBox txtLog 
  56.       BackColor       =   &H80000000&
  57.       Height          =   2715
  58.       Left            =   0
  59.       Locked          =   -1  'True
  60.       MultiLine       =   -1  'True
  61.       ScrollBars      =   2  'Vertical
  62.       TabIndex        =   4
  63.       Text            =   "RegWiz.frx":0000
  64.       Top             =   780
  65.       Width           =   4875
  66.    End
  67.    Begin VB.Label Label2 
  68.       Caption         =   "&Filter"
  69.       Height          =   255
  70.       Left            =   0
  71.       TabIndex        =   3
  72.       Top             =   480
  73.       Width           =   795
  74.    End
  75.    Begin VB.Label Label1 
  76.       Caption         =   "Directory"
  77.       Height          =   255
  78.       Left            =   0
  79.       TabIndex        =   1
  80.       Top             =   120
  81.       Width           =   795
  82.    End
  83. Attribute VB_Name = "frmRegWiz"
  84. Attribute VB_GlobalNameSpace = False
  85. Attribute VB_Creatable = False
  86. Attribute VB_PredeclaredId = True
  87. Attribute VB_Exposed = False
  88. Option Explicit
  89. Private Const MODULE_NAME = "frmRegWiz"
  90. Private msFilter As String
  91. Private Err As New CGUIErr
  92. 'Start the registration Register. Directories will be recursed
  93. 'if requested.
  94. 'FileSystemObject is used to make life easier.
  95. Private Sub cmdReg_Click()
  96. On Error GoTo ErrHandler
  97. Dim oFS As FileSystemObject
  98. Dim oFolder As Folder
  99.     Screen.MousePointer = vbHourglass
  100.         Set oFS = New FileSystemObject
  101.         Set oFolder = oFS.GetFolder(txtDir.Text)
  102.         msFilter = Trim$(txtFilter.Text) & ","
  103.         
  104.         RegisterFolder oFolder, Register:=True
  105.     Screen.MousePointer = vbDefault
  106.     Exit Sub
  107. ErrHandler: Err.Show ProcName:=MODULE_NAME & ".cmdReg_Click"
  108. End Sub
  109. Private Sub cmdUnReg_Click()
  110. On Error GoTo ErrHandler
  111. Dim oFS As FileSystemObject
  112. Dim oFolder As Folder
  113.     Screen.MousePointer = vbHourglass
  114.         Set oFS = New FileSystemObject
  115.         Set oFolder = oFS.GetFolder(txtDir.Text)
  116.         msFilter = Trim$(txtFilter.Text) & ","
  117.         
  118.         RegisterFolder oFolder, Register:=False
  119.     Screen.MousePointer = vbDefault
  120.     Exit Sub
  121. ErrHandler: Err.Show ProcName:=MODULE_NAME & ".cmdUnReg_Click"
  122. End Sub
  123. 'Create the default form settings
  124. Private Sub Form_Load()
  125. On Error GoTo ErrHandler
  126.     Dim sMyCmd As String
  127.     Dim sCmdRequest As String
  128.     Dim oFS As FileSystemObject
  129.     Dim bRegister
  130.     Set oFS = New FileSystemObject
  131.     txtFilter.Text = GetKeyValue(HKEY_CURRENT_USER, REGISTRY_PATH, REGISTRY_KEY_FILTER)
  132.     If txtFilter.Text = vbNullString Then txtFilter.Text = "Dll,Exe,Ocx,Tlb"
  133.     chkRecurse.Value = (1 And GetKeyValue(HKEY_CURRENT_USER, REGISTRY_PATH, REGISTRY_KEY_RECURSE) = "1")
  134.     txtLog.Text = vbNullString
  135.     'Grab the command string and determine if a Registration or Unregistration needed.
  136.     sCmdRequest = Trim$(Command$)
  137.     If UCase$(Left$(sCmdRequest, 2) = "-U") Then
  138.         bRegister = False
  139.         sCmdRequest = Trim$(Mid$(sCmdRequest, 3))
  140.     Else
  141.         bRegister = True
  142.     End If
  143.     'Strip out the quotes from a parameter if they were typed by a user
  144.     If Left$(sCmdRequest, 1) = """" Then sCmdRequest = Mid$(sCmdRequest, 2, Len(sCmdRequest) - 2)
  145.     'Three possible actions:
  146.     '  1. Started standalone to register it
  147.     '  2. A Directory name has been supplied
  148.     '  3. A File name has been supplied
  149.     If sCmdRequest = vbNullString Then
  150.         'Hook into the Registry for Registering TLIBs
  151.         sMyCmd = App.Path & "\" & App.EXEName & ".Exe %1"
  152.         UpdateKeyValue HKEY_CLASSES_ROOT, "dllFile\shell\Register\command", "", sMyCmd
  153.         UpdateKeyValue HKEY_CLASSES_ROOT, "exeFile\shell\Register\command", "", sMyCmd
  154.         UpdateKeyValue HKEY_CLASSES_ROOT, "Folder\shell\Register Directory\command", "", sMyCmd
  155.         UpdateKeyValue HKEY_CLASSES_ROOT, "ocxFile\shell\Register\command", "", sMyCmd
  156.         UpdateKeyValue HKEY_CLASSES_ROOT, "tlb_auto_File\shell\Register\command", "", sMyCmd
  157.         
  158.         'Hook into the Registry for UnRegistering TLIBs
  159.         sMyCmd = App.Path & "\" & App.EXEName & ".Exe -U %1"
  160.         UpdateKeyValue HKEY_CLASSES_ROOT, "dllFile\shell\UnRegister\command", "", sMyCmd
  161.         UpdateKeyValue HKEY_CLASSES_ROOT, "exeFile\shell\UnRegister\command", "", sMyCmd
  162.         UpdateKeyValue HKEY_CLASSES_ROOT, "Folder\shell\UnRegister Directory\command", "", sMyCmd
  163.         UpdateKeyValue HKEY_CLASSES_ROOT, "ocxFile\shell\UnRegister\command", "", sMyCmd
  164.         UpdateKeyValue HKEY_CLASSES_ROOT, "tlb_auto_File\shell\UnRegister\command", "", sMyCmd
  165.         
  166.         MsgBox "RegWiz has been registered successfully", vbOKOnly, "RegWiz - Information"
  167.         Unload Me
  168.         
  169.     ElseIf oFS.FileExists(sCmdRequest) Then
  170.         If bRegister Then RegisterFile sCmdRequest Else UnRegisterFile sCmdRequest
  171.         Unload Me
  172.     ElseIf oFS.FolderExists(sCmdRequest) Then
  173.         'Carry on and show
  174.         txtDir.Text = sCmdRequest
  175.         
  176.         'Display the correct buttons
  177.         cmdReg.Visible = bRegister
  178.         cmdUnReg.Visible = Not bRegister
  179.         
  180.     Else
  181.         MsgBox "Cannot find a file or folder called " & sCmdRequest, vbOKOnly, "RegWiz - Error"
  182.         Unload Me
  183.     End If
  184.        
  185.     Exit Sub
  186. ErrHandler: Err.Show ProcName:=MODULE_NAME & ".Form_Load"
  187. End Sub
  188. 'Register all of the files in the folder that match the filter.
  189. 'Attempt to open the TypeLibrary for the file and then register that type library.
  190. Private Sub RegisterFolder(ByVal Folder As Folder, Optional ByVal Register As Boolean = True)
  191. Dim oTlib As TypeLibInfo
  192. Dim oTLApp As TLIApplication
  193. Dim oFile As File
  194. Dim oNewFolder As Folder
  195. Dim sIndent As String
  196.     'The procedure recurses. This will be used to indent the log text
  197.     Static iDepth As Integer
  198.     sIndent = Space$(iDepth)
  199.     iDepth = iDepth + 1
  200.     Log sIndent & Folder.Path & "\" & vbCrLf
  201.     For Each oFile In Folder.Files
  202.         'Register any that match the filter
  203.         If InStr(1, msFilter, Mid$(oFile.Path, InStrRev(oFile.Path, ".") + 1) & ",", vbTextCompare) > 0 Then
  204.             
  205.             Set oTLApp = New TLIApplication
  206.             
  207.             'Load the Typelibrary if there is one
  208.             On Error Resume Next
  209.             Set oTlib = oTLApp.TypeLibInfoFromFile(oFile.Path)
  210.             
  211.             'If there is a type library then register it.
  212.             If Err.Number = 0 Then
  213.                 Err.Clear
  214.                 If Register Then
  215.                     oTlib.Register
  216.                     If Err.Number = 0 Then
  217.                          Log sIndent & oFile.Name & "  - OK " & vbCrLf
  218.                     Else
  219.                         Log sIndent & oFile.Name & " REGISTRATION failed" & vbCrLf
  220.                     End If
  221.                 Else
  222.                     oTlib.UnRegister
  223.                     If Err.Number = 0 Then
  224.                          Log sIndent & oFile.Name & "  - Unregister OK " & vbCrLf
  225.                     Else
  226.                         Log sIndent & oFile.Name & " UNREGISTRATION failed" & vbCrLf
  227.                     End If
  228.                 End If
  229.             DoEvents
  230.             End If
  231.             
  232.         End If
  233.     Next oFile
  234.     'Recurse into the child folders if that was requested
  235.     If chkRecurse.Value = vbChecked Then
  236.         For Each oNewFolder In Folder.SubFolders
  237.             RegisterFolder oNewFolder, Register
  238.         Next oNewFolder
  239.     End If
  240.     iDepth = iDepth - 1
  241.     Exit Sub
  242. ErrHandler: Err.Raise ProcName:=MODULE_NAME & ".RegisterFolder"
  243. End Sub
  244. 'Writes text to the Log. Scrolls the log as it goes
  245. Private Sub Log(ByVal Text As String)
  246. On Error GoTo ErrHandler
  247.     txtLog.Text = txtLog.Text & Text
  248.     txtLog.SelStart = Len(txtLog.Text)
  249.     Exit Sub
  250. ErrHandler: Err.Raise ProcName:=MODULE_NAME & ".Log"
  251. End Sub
  252. 'Save the form settings
  253. Private Sub Form_Unload(Cancel As Integer)
  254. On Error GoTo ErrHandler
  255.     Call UpdateKeyValue(HKEY_CURRENT_USER, REGISTRY_PATH, REGISTRY_KEY_FILTER, txtFilter.Text)
  256.     Call UpdateKeyValue(HKEY_CURRENT_USER, REGISTRY_PATH, REGISTRY_KEY_RECURSE, chkRecurse.Value)
  257.     Exit Sub
  258. ErrHandler: Err.Show ProcName:=MODULE_NAME & ".Form_Unload"
  259. End Sub
  260. Private Sub RegisterFile(ByVal Filename As String)
  261. Dim oTlib As TypeLibInfo
  262. Dim oTLApp As TLIApplication
  263.         
  264.     Set oTLApp = New TLIApplication
  265.             
  266.     'Load the Typelibrary if there is one
  267.     On Error Resume Next
  268.     Set oTlib = oTLApp.TypeLibInfoFromFile(Filename)
  269.     'If there is a type library then register it.
  270.     If Err.Number = 0 Then
  271.         Err.Clear
  272.         oTlib.Register
  273.         If Err.Number = 0 Then
  274.              MsgBox Filename & " has been registered", vbOKOnly, "RegWiz - Information"
  275.         Else
  276.             MsgBox Filename & " failed to register, even though it contains a Type Library", vbOKOnly, "RegWiz - File Error"
  277.         End If
  278.     Else
  279.         MsgBox Filename & " does not contain a valid Type library", vbOKOnly, "RegWiz - File Error"
  280.     End If
  281.     Exit Sub
  282. ErrHandler: Err.Raise ProcName:=MODULE_NAME & ".RegisterFile"
  283. End Sub
  284. Private Sub UnRegisterFile(ByVal Filename As String)
  285. Dim oTlib As TypeLibInfo
  286. Dim oTLApp As TLIApplication
  287.         
  288.     Set oTLApp = New TLIApplication
  289.             
  290.     'Load the Typelibrary if there is one
  291.     On Error Resume Next
  292.     Set oTlib = oTLApp.TypeLibInfoFromFile(Filename)
  293.     'If there is a type library then register it.
  294.     If Err.Number = 0 Then
  295.         Err.Clear
  296.         oTlib.UnRegister
  297.         If Err.Number = 0 Then
  298.              MsgBox Filename & " has been Unregistered", vbOKOnly, "RegWiz - Information"
  299.         Else
  300.             MsgBox Filename & " failed to Unregister, even though it contains a Type Library", vbOKOnly, "RegWiz - File Error"
  301.         End If
  302.     Else
  303.         MsgBox Filename & " does not contain a valid Type library", vbOKOnly, "RegWiz - File Error"
  304.     End If
  305.     Exit Sub
  306. ErrHandler: Err.Raise ProcName:=MODULE_NAME & ".UnRegisterFile"
  307. End Sub
  308.