Windows系统将计算机全部配置信息和各应用程序信息容纳在“注册表”数据库中,用它来管理应用程序和关联文件、硬件设备说明、状态属性以及各种状态信息和数据等。注册表由“我的电脑”分出几个根键蜂箱分支(根键名前缀为HKEY_,H由蜂箱Hive而来),都有哪类根键是由安装的操作系统来决定的。

1、注册表常见的根键分支有:  

  • HKEY_CLASSES_ROOT当前已在计算机上注册的所有COM服务器和与应用程序相关联的所有文件扩展名。
  • HKEY_CURRENT_CONFIG当前计算机的所有硬件配置信息。
  • HKEY_CURRENT_USER登录到当前计算机上的用户配置文件,其子项包含着环境变量、个人程序组、桌面设置、网络连接、打印机和应用程序首选项。
  • HKEY_LOCAL_MACHINE包含了操作系统及硬件相关信息的配置,为公共配置信息,与具体用户无关。
  • HKKEY_USERS当前计算机上所有的用户的缺省配置信息。
  • HKEY_DYN_DATA 用于Windows95,98,Me,包含硬件的当前状态,也包含了那些需要更新和检索的数据。
  • 另外有的系统还有 HKEY_PERFORMANCE_DATA,HKEY_PERFORMANCE_TEXT,HKEY_PERFORMANCE_NLSTEXT 根键。

2、VB.Net可以通过使用API函数(不推荐)、My.Computer.Registry 命名空间、VB注册表原始程序方法来操作注册表。

(1)VB注册表原始程序方法只要有普通用户的权限就能够执行,但这些方法只能对如下默认路径范围的注册表进行操作:HKEY_CURRENT_USER\\Software\\VBandVBAProgramSettingsRegistry。这些方法有:

  • SaveSetting(程序名,节名,键名,键值) 用此方法创建一个键,如果创建的键路径中没有VBandVBAProgramSettingsRegistry 子项,会自动创建这个子项,然后再添加相应键。
  • GetSetting(程序名,节名,键名[,默认键值]) 返回注册表键的值(如果没有键值则返回默认键值)
  • GetAllSettings(程序名,节名) 返回该节的所有注册表键值对数组(数组一维代表节,二维代表键,如果是0代表键名,1代表键值)
  • DeleteSetting(程序名[,节名]) 删除该程序或节的所有注册表键。

举例:

Dim rg(,) As String=GetAllSettings("我的程序","数据目录")  
For i As Integer = 0 To rg.GetUpperBound(0)
TextBox1.Text &= rg(i,0) & "=" & rg(i,1)

Next

(2)My.Computer.Registry命名空间有七个RegistryKey实例对象,对应注册表的七个相应根键:

.ClassesRoot---HKEY_CLASSES_ROOT

.CurrentConfig---HKEY_CURRENT_CONFIG

.CurrentUser---HKEY_CURRENT_USER

.LocalMachine---HKEY_LOCAL_MACHINE

.Users---HKKEY_USERS

.DynData---HKEY_DYN_DATA  

.PerformanceData---HKEY_PERFORMANCE_DATA  

      对以上RegistryKey对象(除了HKEY_CURRENT_USER)的注册表操作可能需要特定的用户权限。使用RegistryKey类前必须先引入Microsoft.Win32命名空间。

(3)RegistryKey 的最常用属性和方法:

Name 返回键的路径

ToString 返回键名

Close  关闭键(如果修改过,保存后再关闭)

CreateSubKey  创建一个子项或打开一个现有子项以进行写访问

DeleteSubKey  删除指定的子项。当该子项还含有子项时,不能被删除

DeleteSubKeyTree  删除一个子项以及它的所有下层子项

DeleteValue  删除该键的值

Flush  把对该键的任何更改立即写入注册表

GetSubKeyNames  返回所有子项名称的字符串数组

GetValue  返回指定名称的值(可以设置一个不存在该名称时的默认返回值)

GetValueKind  返回某个键内指定值的RegistryValueKind类型,可能是:Binary,DWord,ExpandString,MultiString,QWord,String,Unknown

GetValueNames  返回所有与此键关联的值名称的字符串数组

OpenSubKey  返回一个子项的RegistryKey对象(可以指定是否可写入)

SetValue  创建或修改指定的键值对

SubKeyCount  返回当前项的直接子项数目

ValueCount  返回存储在该键内的值数目

举例:

Imports Microsoft.Win32
Public Class Form1
Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
Dim reg As RegistryKey=My.Computer.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\un",True)
If reg.GetValue("test") IsNot Nothing Then
If MessageBox.Show("该键已经存在,需要删除吗?","提示",MessageBoxButtons.YesNo)=DialogResult.Yes Then
reg.DeleteValue("test",True)
MessageBox.Show("删除成功!")
End If
Else
reg.SetValue("test",567)
MessageBox.Show("设置成功!")
End If
reg.Close()
reg=Nothing
End Sub
End Class

(更多语法基础知识见本人的视频课程《VB .NET 编程语法知识 ( Visual Basic 2022 )》)