Microsoft KB Archive/316151

= How to write your own registry accessing functions by using the Base Class Libraries in Visual Basic .NET or in Visual Basic 2005 =

Article ID: 316151

Article Last Modified on 12/6/2006

-

APPLIES TO


 * Microsoft Visual Basic 2005
 * Microsoft Visual Basic .NET 2003 Standard Edition
 * Microsoft Visual Basic .NET 2002 Standard Edition

-



This article was previously published under Q316151





For a Microsoft Visual Basic 6.0 version of this article, see 145679.

IN THIS TASK
SUMMARY
 * Limitations of the GetSetting and SaveSetting Functions
 * Using the Registry and RegistryKey Classes

REFERENCES



SUMMARY
This article demonstrates how to use Visual Basic. NET or Visual Basic 2005 to access the registry. To do this, you write your own registry accessing functions by using the Base Class Libraries.

Limitations of the GetSetting and SaveSetting Functions
Visual Basic .NET provides the GetSetting and SaveSetting functions to access the registry. These functions have the following limitations:
 * You can access only the registry keys under HKEY_CURRENT_USER\Software\VB and VBA Program Settings.
 * You must be logged on to the system, because you perform the modification under the HKEY_CURRENT_USER registry key. This key is not active until the user is logged on to the system.

NOTE: If the key setting cannot be saved for any reason, an error message appears.

back to the top

Using the Registry and RegistryKey Classes
To access the registry without the constraints of the GetSetting and SaveSetting functions, use the Registry and RegistryKey classes in the Microsoft.Win32 namespace. The Registry class supplies the base registry keys to access values and subkeys in the registry. It has static (shared) fields, such as CurrentUser, to represent the root registry key.

The RegistryKey class represents a key level node in the Windows registry. This class is a registry encapsulation that enables read and write permissions to the registry through the GetValue and SetValue methods of the RegistryKey class.

To create a console project to read and write to the registry by using the Registry and RegistryKey classes, follow these steps:  Open Microsoft Visual Studio .NET or Microsoft Visual Studio 2005. On the File menu, click New Project. Select Visual Basic Projects in the TreeView on the left, and then select Console Application in the ListView on the right.

Note In Visual Studio 2005, select Visual Basic in the Project types on the left, and then select Console Application in the Templates on the right.  Import the following namespaces to the project: Imports System.Diagnostics Imports Microsoft.Win32

  Add the following code to the Module1: Sub WriteRegistry(ByVal ParentKey As RegistryKey, ByVal SubKey As String, _   ByVal ValueName As String, ByVal Value As Object)

Dim Key As RegistryKey

Try 'Open the registry key. Key = ParentKey.OpenSubKey(SubKey, True) If Key Is Nothing Then 'if the key doesn't exist. Key = ParentKey.CreateSubKey(SubKey) End If

'Set the value. Key.SetValue(ValueName, Value)

Console.WriteLine(&quot;Value:{0} for {1} is successfully written.&quot;, Value, ValueName) Catch e As Exception Console.WriteLine(&quot;Error occurs in WriteRegistry&quot; & e.Message) End Try End Sub

Sub ReadRegistry(ByVal ParentKey As RegistryKey, ByVal SubKey As String, _   ByVal ValueName As String, ByRef Value As Object)

Dim Key As RegistryKey

Try 'Open the registry key. Key = ParentKey.OpenSubKey(SubKey, True) If Key Is Nothing Then 'if the key doesn't exist Throw New Exception(&quot;The registry key doesn't exist&quot;) End If

'Get the value. Value = Key.GetValue(ValueName)

Console.WriteLine(&quot;Value:{0} for {1} is successfully retrieved.&quot;, Value, ValueName) Catch e As Exception Console.WriteLine(&quot;Error occurs in ReadRegistry&quot; & e.Message) End Try End Sub

  Copy and paste the following code to replace the Sub Main that is generated by Visual Basic .NET or Visual Basic 2005: Sub Main WriteRegistry(Registry.CurrentUser, &quot;Software\MySoftware&quot;, &quot;Count&quot;, 123)

Dim Value As Object ReadRegistry(Registry.CurrentUser, &quot;Software\MySoftware&quot;, &quot;Count&quot;, Value)

Console.ReadLine End Sub </li> Press F5 to run the application.</li></ol>

NOTE: This procedure creates a registry key named MySoftware under the subkey HKEY_CURRENT_USER\Software. And it creates a DWORD value named Count with the value 123 under the MySoftware key.

back to the top