068读写注册表

目录

1.注册表

2.注册表类

RegistryKey 类

属性

方法

Registry 类

字段

方法


1.注册表

    注册表的层次结构非常类似于文件系统。查看和修改注册表内容的一般方式是使用regedit或regedt32工具。
   在注册表中,最上面的节点是注册的根键,它们的位置是不能改变的。系统共有7个根键,但使用regedit只能看到其中的5个:

  •     HKEY_CLASSES_ROOT(HKCR):包含系统上文件类型的细节(.txt、.doc等),以及应用程序可以打开的文件类型。它还包含所有COM组件的注册信息。
  •      HKEY_CURRENT_USER(HKCU):包含用户目前登录的机器的设置。这些设置包括桌面设置、环境变量、网络和打印机连接,以及其他定义用户操作环境的设置。
  •      HKEY_LOCAL_MACHINE(HKLM):包含所有安装到机器上的软件和硬件信息,这些设置不是用户特有的,而是可用于所有登录到机器上的用户所共享。它还包含HKCR根键:HKCR实际上并不是一个独立的根键,而只是一个对注册表键HKLM/SOFTWARE/Classes的映射。
  •      HKEY_USERS(HKUSR):包含所有用户的配置。它还包含HKCU根项,HKCU根项是对HKEY_ USERS中一个键的映射。
  •      HKEY_CURRENT_ CONFIG(HKCF):包含机器上的硬件配置信息。

    每个注册表键都类似于文件系统中的文件夹或文件。但是,文件系统可以区分文件(文件中包含数据)和文件夹(其中主要包含其他文件夹或文件),而注册表中只有键。键可以包含数据和其他的键。
    如果键中包含数据,这个键就表示为一组值。每个值都有一个相关的名称、数据类型和数据,另外,键还可以有默认值。键的数据类型分别为:

  • REG_SZ:字符串类型
  • REG DWORD:无符号的32位整数
  • REG BINARY:字节类型

应用程序会在注册表中创建许多键以存储数据,通常把它们存储在键HKLM\Software\<CompanyName>中。

2.注册表类

RegistryKey 类

https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.win32.registrykey?view=netcore-3.1

属性

 
Name

检索项的名称。

SubKeyCount

检索当前项的子项计数。

ValueCount

检索项中值的计数。

View

获取用于创建注册表项的视图。

方法

表 2
Close()

关闭该项,如果其内容已修改,则将其刷新到磁盘。

CreateSubKey(String)

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

DeleteSubKey(String)

删除指定子项。

DeleteSubKeyTree(String)

递归删除子项和任何子级子项。

DeleteValue(String)

从此项中删除指定值。

DeleteValue(String, Boolean)

从此项中删除指定的值,并指定在找不到该值时是否引发异常。

GetAccessControl()

返回当前注册表项的访问控制安全性。

GetSubKeyNames()

检索包含所有子项名称的字符串数组。

GetValue(String)

检索与指定名称关联的值。 如果注册表中不存在名称/值对,则返回 null

GetValueKind(String)

检索与指定名称关联的值的注册表数据类型。

GetValueNames()

检索包含与此项关联的所有值名称的字符串数组。

OpenSubKey(String)

以只读方式检索子项。

SetAccessControl(RegistrySecurity)

向现有注册表项应用 Windows 访问控制安全性。

SetValue(String, Object)

设置指定的名称/值对。

Registry 类

https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.win32.registry?view=netcore-3.1

    Registry类只能对注册表键进行单一的访问,执行简单的操作。Registry的另一个作用是提供表示根键的RegistryKey实例,以便在注册表中浏览。Registry是通过静态属性来提供这些实例的,这样的属性共有7个:

字段

ClassesRoot

定义文档的类型(或类)以及与那些类型关联的属性。 该字段读取 Windows 注册表基项 HKEY_CLASSES_ROOT。

CurrentConfig

包含有关非用户特定的硬件的配置信息。 该字段读取 Windows 注册表基项 HKEY_CURRENT_CONFIG。

CurrentUser

包含有关当前用户首选项的信息。 此字段读取 Windows 注册表基项 HKEY_CURRENT_USER。

LocalMachine

包含本地计算机的配置数据。 该字段读取 Windows 注册表基项 HKEY_LOCAL_MACHINE。

PerformanceData

包含软件组件的性能信息。 该字段读取 Windows 注册表基项 HKEY_PERFORMANCE_DATA。

Users

包含有关默认用户配置的信息。 该字段读取 Windows 注册表基项 HKEY_USERS。

方法

GetValue(String, String, Object)

检索与指定的注册表项中的指定名称关联的值。 如果在指定的项中未找到该名称,则返回您提供的默认值;或者,如果指定的项不存在,则返回 null

SetValue(String, String, Object)

设置指定的注册表项的指定名称/值对。 如果指定的项不存在,则创建该项。

SetValue(String, String, Object, RegistryValueKind)

通过使用指定的注册表数据类型,设置该指定的注册表项的名称/值对。 如果指定的项不存在,则创建该项。

例如,要获得一个表示HKLM键的RegistryKey对象,可以使用如下形式的代码:
    Dim hklm As RegistryKey =Registry.LocaIMachine

    Registry类没有供用户使用的公共构造函数,也没有可以直接通过键的名称来访问键的方法。如果要打开给定位置上的一个注册表键,唯一的方式是从Registry的静态属性开始向下浏览各个键。例如,要读取HKLM/Software/Microsoft键中的一些数据,可以使用下面的代码:

 Dim hklm As RegistryKey = Registry.LocalMachine
 Dim hkSonware As RegistryKey = hklm.OpenSubKey("Software")
 Dim hkMicrosoft As RegistryKey = hkSortware.OpenSubKey("Microsoft")

    以这种方式访问注册表键是只读的。如果要向该键写入(包括写入其值,或创建和删除其子键),就需要使用另一个重载版本的OpenSubKey()方法,该方法使用Boolean类型参数表示是否要对该键进行读写访问。例如,下面的代码以读写方式打开HKLM\Software/Microsoft键:   

    Dim hklm As RegistryKey=Registry.LocalMachine
    Dim hkSortware As RegistryKey=hklm.OpenSubKey("Software")
    Dim hkMicrosoft As RegistryKey= hkSortware.OpenSubKey("Microsoft", True)

    如果指定的键不存在,则OpenSubKey()方法会返回空Nothing。在创建一个键时,可以使用RegistryKey.CreateSubKey()方法,该方法会返回RegistryKey对象的引用,以提供对新创建的键的读写访问:

    Dim hklm As RegistryKey = Registry.LocalMachine
    Dim hkSortware As RegistryKey=hklm.OpenSubKey("Sofware")
    Dim hkAtg As RegistryKey=hkSortware.CreateSubKey(¨Atg")

     调用CreateSubKey()方法创建键时,如果键不存在,则会创建该键。如果键已经存在,则会返回一个表示该键的RegistryKey对象。 CreateSubKey()方法不会删除任何数据。如果要删除注册表键,则需要显式调用RegistryKey.Delete()方法,因此注册表对于Windows是非常重要的。如果删除了一些重要的键,就会中断Windows的执行,因此删除注册表键时应非常小心。
    在定位要读取或修改的注册表键后,就可以使用SetValue()方法或GetValue()方法设置或获取该键中的值。这两个方法的声明如下:

GetValue(name As String) As Object
SetValue(name As String,value As Object)

    在调用SetValue()方法设置键的值时,它会根据所提供的数据类型自动将其转换为相应的REG_SZ、REG_DWORD或REG_BINARY类型。例如:    

    Dim hkAtg As RegistryKey=hkSortware.CreateSubKey("Atg")
    hkAtg.SetValue("Name¨,¨韩梅梅¨)
    hkAtg.SetValue("Age",10)

    这段代码设置键包含两个值:REG_SZ类型的Name和REG_DWORD类型的Age。
    RegistryKey.GetValue()方法与此类似,它会返回一个对象引用,如果该方法检测到值的类型为REG_SZ,则返回一个字符串引用,如果值的类型为REG_DWORD,则返回一个Integer类型的值。

dim stringValue as string=hkatg.getvalue("Name")
dim intValue as integer=hkatg.getvalue("Age")

最后,完成了读取或修改数据操作后,应关闭键:
bkAtg.Clooe()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值