KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q297292: HOWTO: Use RegObji.exe to Copy a Registry Key Programmatically

Article: Q297292
Product(s): Microsoft Visual Basic for Windows
Version(s): 5.0,6.0
Operating System(s): 
Keyword(s): kbfile kbDLL kbRegistry kbVBp kbVBp500 kbVBp600 kbGrpDSVB kbDSupport kbCodeSnippet
Last Modified: 21-JUN-2002

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual Basic Enterprise Edition for Windows, versions 5.0, 6.0 
- Microsoft Visual Basic Professional Edition for Windows, versions 5.0, 6.0 
- Microsoft Visual Basic Learning Edition for Windows, versions 5.0, 6.0 
-------------------------------------------------------------------------------

SUMMARY
=======

This article serves two purposes:

1. Demonstrate how to use RegObji.exe to copy a registry key to another location
  in the registry.

2. Demonstrate how to use a registry key that contains binary data (specified as
  type REG_BINARY) because the examples that come with RegObji.exe do not
  demonstrate how to handle a binary registry value.

The code sample in this article does not store the REG_BINARY value. If you need
to preserve a value by assigning it to a variable, you can store the binary data
in a variable of the VARIANT datatype.

The following file is available for download from the Microsoft Download Center:

  DownloadDownload RegObji.exe now
  (http://download.microsoft.com/download/vb60pro/Update/6.0/W9X2K/EN-US/RegObji.exe)

For additional information about how to download Microsoft Support files, click
the following article number to view the article in the Microsoft Knowledge
Base:

  Q119591 How to Obtain Microsoft Support Files from Online Services

Microsoft scanned this file for viruses. Microsoft used the most current
virus-detection software that was available on the date that the file was
posted. The file is stored on secure servers that prevent any unauthorized
changes to the file.

MORE INFORMATION
================

Step-by-Step Procedure
----------------------

1. Create a new Standard EXE project in Visual Basic. Form1 is created by
  default.

2. On the Project menu, add a new standard Module, Module1, to the project.

3. On the Project menu, click References, select "Registration Manipulation
  Classes" (RegObji.exe), and then click OK.

4. Add the following code to Module1:

  Option Explicit

  Dim readReg As Registry
  Dim writeReg As Registry
  Dim keyExists As Boolean
  Dim I As Integer
  Dim wKeys As RegKey
  Dim rKeys As RegKey
  Dim hiveR As RegKey
  Dim hiveW As RegKey
  Dim KeyToAdd As String
  Dim KeyToFind As String

  Public Sub main()

  KeyToAdd = "Testing"
  ' The following key should be present on all systems.
  KeyToFind = "Microsoft\Direct3D\Drivers\Direct3D HAL"
  Set writeReg = New Registry
  Set readReg = New Registry

  Set readReg = New RegObj.Registry
  Set writeReg = New RegObj.Registry

  Set hiveR = readReg.RegKeyFromString("\HKEY_LOCAL_MACHINE\SOFTWARE\")
  Set rKeys = hiveR.SubKeys(KeyToFind)
  Set hiveW = writeReg.RegKeyFromString("\HKEY_LOCAL_MACHINE\SOFTWARE\")

  For I = 1 To hiveR.SubKeys.Count
      If hiveR.SubKeys(I).Name = KeyToAdd Then
          keyExists = True
          Exit For
      End If
  Next

  ' If the key already exists, do not modify it.
  ' This may be changed as needed.
  If Not keyExists Then
      hiveW.SubKeys.Add (KeyToAdd)
      hiveW.SubKeys.Reset

      Set wKeys = hiveW.SubKeys(KeyToAdd)

      For I = 1 To rKeys.Values.Count
          wKeys.Values.Add rKeys.Values(I).Name, rKeys.Values(I).Value, _
             rKeys.Values(I).Type
      Next
  End If
  End Sub

5. On the Project menu, click "Project1 Properties", and change the StartUp
  object to Sub Main.

6. Run the project.

7. To verify that a key named Testing is created under
  HKEY_LOCAL_MACHINE\SOFTWARE, run Regedit.exe. You may want to remove the
  Testing key when you are finished.

Additional query words: RegObj.dll

======================================================================
Keywords          : kbfile kbDLL kbRegistry kbVBp kbVBp500 kbVBp600 kbGrpDSVB kbDSupport kbCodeSnippet 
Technology        : kbVBSearch kbAudDeveloper kbZNotKeyword6 kbZNotKeyword2 kbVB500Search kbVB600Search kbVB500 kbVB600
Version           : :5.0,6.0
Issue type        : kbhowto

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.