Visual Basic - Registry Programming

6 minute read

One of the most required tasks these days for software is to remember the configuration and the settings as changed by the user and function accordingly. This can be done either by keeping a separate database for such parameters or by using Windows Registry.  In this article, we shall deal with Registry Programming

Registry Programming

What is Registry?

The Registry is a database used to store settings and options for the 32 bit versions of Microsoft Windows including Windows 95, 98, ME and NT/2000. It contains information and settings for all the hardware, software, users, and preferences of the PC.


Any changes in software configuration or changes done in Control Panel settings are reflected and stored in the Registry.

Structure of Registry


The Registry has a hierarchal structure and appears similar directory structure as seen in Windows Explorer.  We can open Registry Editor by typing regedit in Start Menuà Run




Figure 1: Registry Editor

Each main branch (win a folder icon) is called a Hive, and Hives contains Keys. Each key can contain other keys (as sub-keys), as well as Values. The values contain the actual information stored in the Registry. There are three types of values; String, Binary, and DWORD - the use of these depends upon the context.


Before starting registry programming, let’s first understand what each of the Hives mean and the values that can stored in sub-keys.


Table 1: Hives




Data Stored


File Association

The branch contains all of your file association mappings to support the drag-and-drop feature, OLE information and Windows shortcuts.


Information regarding User Logged on.

The branch links to the section of HKEY_USERS appropriate for the user currently logged onto the PC and contains information such as logon names, desktop settings, and Start menu settings.


Hardware Specific Information

This branch contains computer specific information about the type of hardware, software, and other preferences on a given PC.


User Information

This branch contains individual preferences for each user of the computer, each user is represented by a SID sub-key located under the main branch.


Current Hardware Configuration

This branch links to the section of HKEY_LOCAL_MACHINE appropriate for the current hardware configuration.


Plug-&-Play Features of Windows

This branch is for use with the Plug-&-Play features of Windows, this section is dymanic and will change as devices are added and removed from the system



Values are of four types varying on the type of data we wish to store in the registry.


Table 2:  Types of Values





This type stores the value as raw binary data.


This type represents the data by a four byte number and is commonly used for Boolean values, such as "0" is disabled and "1" is enabled.


This type is an expandable data string that is string containing a variable to be replaced when called by an application.


This type is a multiple string used to represent values that contain lists or multiple values, each entry is separated by a NULL character.


This type is a standard string, used to represent human readable text values.


Saving Values in Registry


When we install our software, say for example, Numerology Report System, a hive is automatically created in Registry as shown in Figure 2.





Figure 2: Registry Key in Registry Editor


We create an object as registry by


Dim reg As cRegistry


Thereafter, we enter the values in the keys by a small snippet.


Set reg = New cRegistry

      'This will create a new section to store your own keys in

reg.Classkey = Hkey ‘HKEY_CURRENT_USER

reg.SectionKey = SectionKey   ‘Software\Numerology Report System

'create the above key

reg.CreateKey                 ‘My Settings

reg.Valuetype = Valuetype     ‘REG_sz

reg.Valuekey = Valuekey       ‘Date

reg.Value = Value             ‘Date$


Getting Values from Registry


Let us obtain the value of the key, which is created while installation of our software.





Figure 3: Value of the Key in Registry Editor


We can obtain this value using same method:


Set reg = New cRegistry

reg.Classkey = Hkey

reg.SectionKey = Section

reg.Valuekey = Valuekey


Let’s write a piece of code to write in registry and read it.


Dim reg As cRegistry


Private Function CreateKeys(HKey As String, SectionKey As String, ValueKey As String, Valuetype As String, Value As String)

      Set reg = New cRegistry

       'This will create a new section to store your own keys in

reg.Classkey = Hkey

reg.SectionKey = SectionKey

'create the above key


'Save the Form settings to the registry

reg.Valuetype = Valuetype

reg.Valuekey = Valuekey

reg.Value = Value

End Function



‘SectionKey = Software\VB and VBA Program Settings\Numerology Report System\My Settings

‘ValueKey = Date

‘ValueType = Reg_sz

‘Value = 01-05-2006


Call CreateKeys(HKEY_CURRENT_USER, "Software\VB and VBA Program Settings\Numerology Report System\My Settings

", "Date", Reg_sz, date$)



‘Section = "Software\VB and VBA Program Settings\Numerology Report    System\My Settings

‘ValueKey = Date


Private Function GetKeys(Hkey As String, Section As String, Valuekey As String)  'Reads the Registry

    Set reg = New cRegistry

    reg.Classkey = Hkey

    reg.SectionKey = Section

    reg.Valuekey = Valuekey

End Function


Call GetKeys("Software\VB and VBA Program Settings\Numerology Report System\My Settings", "Date")


Another way to save and get values of a key in registry


There’s one method to save keys and get their values through coding.  This method uses statements instead of creating objects. They are listed in Table 3.


Table 3: Setting and Getting Values



Setting a Value

Getting Value


SaveSetting(appname, section, key, setting)

GetSetting(appname, section, key)


SaveSetting App.Title, "Settings", "Left", Me.Left

Me.Left= GetSetting(App.Title, "Settings", "Left")


The key Settings is created under the key which is made during installation procedure and if we wish to have different path (say for example HKEY_CURRENT_USER\SOFTWARE\NRS) then we need to mention in


SaveSetting App.Title, "HKEY_CURRENT_USER\SOFTWARE\NRS", "Left", Me.Left


Let’s now delete the key we have made.

Deleting Registry Keys


The statement for deleting the registry settings, we use the DeleteSetting statement as shown below,


DeleteSetting appname, section[, key]    


Let’s understand the syntax of this statement.


Table 4: Syntax of DeleteString





Application Name
(normally referred as App.Title or App.EXEName


Name of the Section where the key is stored/key which needs to be deleted.


Expression containing name of the key setting being deleted.


DeleteSetting App.Title, "Settings"


To check if the key is deleted or not,


If len(GetSetting(App.Title, "Settings", "Left")) = 0 
'then it doesn’t exists

      MsgBox “Key not found”

End If



Why use Registry


The question that remains unanswered is why use registry?  Registry can be used for several reasons as listed below


·         To remember the last used configuration of software.

·         To keep a track of when all the software was used.

·         To keep license keys.

·         To track the changes made by the software in the system.


With this we end this article on Registry Programming.

Note: This series was first published in DeveloperIQ and was co-authored by Puneet Ghanshani with Pranjali Bakeri in 2005-2006.