Visual Basic Demystified - III

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



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

Hive

Interpretation

Data Stored

HKEY_CLASSES_ROOT

File Association

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

HKEY_CURRENT_USER

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.

HKEY_LOCAL_MACHINE

Hardware Specific Information

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

HKEY_USERS

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.

HKEY_CURRENT_CONFIG

Current Hardware Configuration

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

HKEY_DYN_DATA

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

Type

Interpretation

REG_BINARY

This type stores the value as raw binary data.

REG_DWORD

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.

REG_EXPAND_SZ

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

REG_MULTI_SZ

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

REG_SZ

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.



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.


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
reg.CreateKey
      'Save the Form settings to the registry
   reg.Valuetype = Valuetype
reg.Valuekey = Valuekey
reg.Value = Value
End Function

‘HKey = HKEY_CURRENT_USER
‘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$)

‘Hkey = HKEY_CURRENT_USER
‘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

Syntax:

SaveSetting(appname, section, key, setting)

GetSetting(appname, section, key)

Example:

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

Argument

Interpretation

appname

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

section

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

key

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.

About Authors

Mr. Punit Ganshani
Contact No: +91 – 9898117828
Email Address: punit.ganshani@gmail.com
Address: VILAYAT DARSHANA3/801, Anmol Towers,Opp. Telephone Exchange,Naranpura, Ahmedabad – 380 063
Ms. Pranjali Bakeri
Contact No: +91 – 9898409287
Email Address: pranjali.bakeri@gmail.com
Address:E-7, Prarthana Alok,B/S. H. L. Commerce College,Navrangpura, Ahmedabad.



Added on December 10, 2007 Comment

Comments

Post a comment