vb.net中访问注册表变得非常的简单。我们可以用 microsoft.Win32 名称空间的 下的 registry 类 和 registryKey 类。 另外 My.Computer.Registry 也可以返回一个 Microsoft.Win32.Registry 类的实例。
下面就举几个小例子来说明vb.net访问注册表的方法。
1,返回或创建一个注册表键
Dim
Key1
As
Microsoft.Win32.RegistryKey
Key1 = My.Computer.Registry.CurrentUser ' 返回当前用户键
Dim Key2 As Microsoft.Win32.RegistryKey
Key2 = Key1.OpenSubKey( " northsnow " ) ' 返回当前用户键下的northsnow键
If Key2 Is Nothing Then
Key2 = Key1.CreateSubKey( " northsnow " ) ' 如果键不存在就创建它
End If
Key1 = My.Computer.Registry.CurrentUser ' 返回当前用户键
Dim Key2 As Microsoft.Win32.RegistryKey
Key2 = Key1.OpenSubKey( " northsnow " ) ' 返回当前用户键下的northsnow键
If Key2 Is Nothing Then
Key2 = Key1.CreateSubKey( " northsnow " ) ' 如果键不存在就创建它
End If
2,删除注册表键
Dim
Key1
As
Microsoft.Win32.RegistryKey
Key1 = My.Computer.Registry.CurrentUser ' 返回当前用户键
Dim Key2 As Microsoft.Win32.RegistryKey
Key2 = Key1.OpenSubKey( " northsnow " ) ' 返回当前用户键下的northsnow键
If Not Key2 Is Nothing Then
Key1.DeleteSubKey( " northsnow " ) ' 如果键不存在就创建它
End If
Key1 = My.Computer.Registry.CurrentUser ' 返回当前用户键
Dim Key2 As Microsoft.Win32.RegistryKey
Key2 = Key1.OpenSubKey( " northsnow " ) ' 返回当前用户键下的northsnow键
If Not Key2 Is Nothing Then
Key1.DeleteSubKey( " northsnow " ) ' 如果键不存在就创建它
End If
3,创建或读取注册表项
Dim
Key1
As
Microsoft.Win32.RegistryKey
Key1 = My.Computer.Registry.CurrentUser ' 返回当前用户键
Dim Key2 As Microsoft.Win32.RegistryKey
Key2 = Key1.OpenSubKey( " northsnow " , True ) ' 返回当前用户键下的northsnow键,如果想创建项,必须指定第二个参数为true
If Key2 Is Nothing Then
Key2 = Key1.CreateSubKey( " northsnow " ) ' 如果键不存在就创建它
End If
' 创建项,如果不存在就创建,如果存在则覆盖
Key2.SetValue( " name " , " 塞北的雪 " )
Key2.SetValue( " sex " , True )
Key2.SetValue( " age " , 30 )
' 返回项值
Dim sb As New System.Text.StringBuilder
sb.AppendLine(Key2.GetValue( " name " ))
sb.AppendLine(Key2.GetValue( " sex " ))
sb.AppendLine(Key2.GetValue( " age " ))
MsgBox (sb.ToString)
' 查验某个项是否存在
If (Key2.GetValue( " name " )) Is Nothing Then
MsgBox ( " no " )
Else
MsgBox ( " yes " )
End If
If (Key2.GetValue( " name2 " )) Is Nothing Then
MsgBox ( " no " )
Else
MsgBox ( " yes " )
End If
' 输出
' 塞北的雪
' True
' 30
' yes
' no
Key1 = My.Computer.Registry.CurrentUser ' 返回当前用户键
Dim Key2 As Microsoft.Win32.RegistryKey
Key2 = Key1.OpenSubKey( " northsnow " , True ) ' 返回当前用户键下的northsnow键,如果想创建项,必须指定第二个参数为true
If Key2 Is Nothing Then
Key2 = Key1.CreateSubKey( " northsnow " ) ' 如果键不存在就创建它
End If
' 创建项,如果不存在就创建,如果存在则覆盖
Key2.SetValue( " name " , " 塞北的雪 " )
Key2.SetValue( " sex " , True )
Key2.SetValue( " age " , 30 )
' 返回项值
Dim sb As New System.Text.StringBuilder
sb.AppendLine(Key2.GetValue( " name " ))
sb.AppendLine(Key2.GetValue( " sex " ))
sb.AppendLine(Key2.GetValue( " age " ))
MsgBox (sb.ToString)
' 查验某个项是否存在
If (Key2.GetValue( " name " )) Is Nothing Then
MsgBox ( " no " )
Else
MsgBox ( " yes " )
End If
If (Key2.GetValue( " name2 " )) Is Nothing Then
MsgBox ( " no " )
Else
MsgBox ( " yes " )
End If
' 输出
' 塞北的雪
' True
' 30
' yes
' no
4,遍历注册表
这个也非常简单,在窗体上放一个按钮和两个文本框,添加如下的代码
Dim
sb
As
New
System.Text.StringBuilder
'
返回遍历结果
Dim sb2 As New System.Text.StringBuilder ' 返回读取出错的注册表键
Private Sub Button3_Click() Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim Key1 As Microsoft.Win32.RegistryKey
Key1 = My.Computer.Registry.CurrentUser '返回当前用户键
If Not Key1 Is Nothing Then
sb.AppendLine(Key1.Name)
readValue(Key1)
readReg(Key1)
End If
Me.TextBox1.Text = sb.ToString
Me.TextBox2.Text = sb2.ToString
End Sub
' 遍历注册表键树
Private Sub readReg() Sub readReg(ByVal r As Microsoft.Win32.RegistryKey)
If r.SubKeyCount > 0 Then
Dim keyName() As String
Dim keyTemp As Microsoft.Win32.RegistryKey
keyName = r.GetSubKeyNames
Dim i As Integer
For i = 0 To keyName.GetLength(0) - 1
Try
sb.AppendLine(keyName(i))
keyTemp = r.OpenSubKey(keyName(i), True)
readValue(keyTemp)
readReg(keyTemp)
Catch ex As Exception
sb2.AppendLine(keyName(i))
End Try
Next
End If
End Sub
' 遍历某键下的项
Private Sub readValue() Sub readValue(ByVal r As Microsoft.Win32.RegistryKey)
If r.ValueCount > 0 Then
Dim valueName() As String
Dim i As Integer
valueName = r.GetValueNames
For i = 0 To valueName.GetLength(0) - 1
sb.AppendLine("####")
sb.Append(r.Name)
sb.Append("----")
sb.Append(r.GetValue(valueName(i)).ToString)
Next
End If
End Sub
Dim sb2 As New System.Text.StringBuilder ' 返回读取出错的注册表键
Private Sub Button3_Click() Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim Key1 As Microsoft.Win32.RegistryKey
Key1 = My.Computer.Registry.CurrentUser '返回当前用户键
If Not Key1 Is Nothing Then
sb.AppendLine(Key1.Name)
readValue(Key1)
readReg(Key1)
End If
Me.TextBox1.Text = sb.ToString
Me.TextBox2.Text = sb2.ToString
End Sub
' 遍历注册表键树
Private Sub readReg() Sub readReg(ByVal r As Microsoft.Win32.RegistryKey)
If r.SubKeyCount > 0 Then
Dim keyName() As String
Dim keyTemp As Microsoft.Win32.RegistryKey
keyName = r.GetSubKeyNames
Dim i As Integer
For i = 0 To keyName.GetLength(0) - 1
Try
sb.AppendLine(keyName(i))
keyTemp = r.OpenSubKey(keyName(i), True)
readValue(keyTemp)
readReg(keyTemp)
Catch ex As Exception
sb2.AppendLine(keyName(i))
End Try
Next
End If
End Sub
' 遍历某键下的项
Private Sub readValue() Sub readValue(ByVal r As Microsoft.Win32.RegistryKey)
If r.ValueCount > 0 Then
Dim valueName() As String
Dim i As Integer
valueName = r.GetValueNames
For i = 0 To valueName.GetLength(0) - 1
sb.AppendLine("####")
sb.Append(r.Name)
sb.Append("----")
sb.Append(r.GetValue(valueName(i)).ToString)
Next
End If
End Sub