分类
C#如何读取注册表中的注册信息‖
| 单击"开始/运行",在" 下图。注:Regedit文件是 | 打开"的后面填入"regedit"。就 微软公司提供给用户编辑注册表 | 可以看到注册表的数据结构了。如 的一个工具。 |
| 在注册表中称为"主键" 键的"子键"。每一个主键可 每一个主键或者子键都可以 每一个键值都赋予了不同的 | ,据图可见,"主键"是有层次结 以对拥有多个子键。如图所示, 拥有多个键值。注册表是一个庞 功能。 | 构的。主键的下一级主键称为该主 右边的这些值就是所谓的键值了。 大的数据库,在其中每一个主键, |
| 二.Visual C#如何读取注册表中的主键和键值: |
| 在.Net FrameWork SDK 中提供了二个用于注册表操 可以继承。在这二个类,定 Visual C#中就可以比较轻 | Beta 2版中,有一个Microsoft 作的类:Registry类、Registry 义了许多关于注册表的方法和属 松的处理关于注册表的各种操作 | .Win32的名称空间,在此名称空间 Key类。这二个类都是封闭类,不 性,通过调用这二个类,在 了。 |
| (1).Registry类: |
| 此类主要封装了七个公有的静态域, 主键,具体如下所示: | 而这些静态域分别代表这视窗注册表中的七个基本的 |
| Registry.ClassesRoot 对应于HKEY_ | CLASSES_ROOT主键 |
| Registry.CurrentUser 对应于HKEY_CURREN主键 |
| Registry.LocalMachin | e 对应于 HKEY_LOCAL_MACHINE | 主键 |
| Registry.User 对应于 HKEY_USER主键 |
| Registry.CurrentConfig 对应于HEK | Y_CURRENT_CONFIG主键 |
| Registry.DynDa 对应于HKEY_DYN_DATA主键 |
| Registry.Performance | Data 对应于HKEY_PERFORMANCE_ | DATA主键 |
| (2).RegistryKey类: |
| 此类中主要封装了对视 到注册表中的基本主键,然 | 窗系统注册表的基本操作。在程 后通过RegistryKey类,来找其 | 序设计中,首先通过Registry类找 下面的子键和处理具体的操作的。 |
| 三.通过一个读取注册表信息例子来具体说明这二个来的用法: |
| (1).程序设计和运行的环境: |
| I视窗系统2000服务器版 |
| II Net FrameWork SDK Beta 2版 |
| (2)在运行程序前的一些必要的处理工作: |
| 在程序设计时,主要功 若干个主键和对应的键值: | 能是读取已经存在的主键键值, | 用户可以按照下图所示的结构新建 |
| 这里有必要说明的是图上只显示了" 键值,对应的键值是:"新值#1"为"001" 键值是:"新值 #1"为"aaa","新值 #2 | 新项 #3"子键对应的键值。在"新项 #2"子键也有 ,"新值 #2"为"002"。在"新项 #1"子键中对应的 "为"bbb"。 |
| (3).程序的主要功能: |
| 程序的主要功能是读取指定主键下面 次显示出来: | 的所有子键和子键拥有的键值,并以列表的形式按层 |
| (4).程序设计过程中的重要步骤以及应该注意的一些问题: |
| I 程序中读取主键、子键和键值所使用到的方法: |
| 程序中为了读取指定主 的四个方法:OpenSubKey, 如下: | 键下面的子键和子键中拥有的键 GetSubKeyNames,GetValueName | 值,主要使用了RegistryKey类中 s,GetValue。具体的用法和意思 |
| OpenSubKey ( string | name )方法主要是打开指定的子 | 键。 |
| GetSubKeyNames ( )方法是获得主键 组。 | 下面的所有子键的名称,它的返回值是一个字符串数 |
| GetValueNames ( )方 数组。 | 法是获得当前子键中的所有的键 | 名称,它的返回值也是一个字符串 |
| GetValue ( string name )方法是指定键的键值。 |
| 程序中具体的使用语句如下: |
| RegistryKey hklm = R | egistry.LocalMachine ; |
| //打开"SYSTEM"子键 |
| RegistryKey software = hklm.Open | SubKey ( "SYSTEM" ) ; |
| //打开"001"子键 |
| RegistryKey no1 = so | ftware.OpenSubKey ( "001" ) | ; |
| //打开"002"子键 |
| RegistryKey no2 = no1.OpenSubKey | ( "002" ) ; |
| 其中listBox1是程序中定义了的列表名称。 |
| II 如何用列表形式显示注册信息: |
| 由于GetSubKeyNames ( 程序中是通过foreach语句 显示出来,程序中具体实现 | )方法和GetValueNames ( )方 实现遍历这些字符串数组的。并 语句如下: | 法的返回值是字符串数组,所以在 且在遍历的时候,就通过列表形式 |
| foreach ( string sit | e in no2.GetSubKeyNames ( ) | ) |
| //开始遍历由子键名称组成的字符串数组 |
| { |
| listBox1.Items.Add ( site ) ; |
| //在列表中加入子键名称 |
| RegistryKey sitekey = no2.OpenSu | bKey ( site ) ; |
| //打开此子键 |
| foreach ( string sVa | lName in sitekey.GetValueNam | es ( ) ) |
| //开始遍历由指定子键拥有的键值名称组成的字符串数组 |
| { |
| listBox1.Items.Add ( "" + sValNa | me + ": " + sitekey.GetValue ( sValName ) ) ; |
| //在列表中加入键名称和对应的键值 |
| } |
| } |
| (5).源程序代码: |
| 通过以上的论述,我们可以得到程序的源程序代码,具体如下: |
| using System ; |
| using System.Drawing ; |
| sing System.Collections ; |
| using System.ComponentModel ; |
| using System.Windows.Forms ; |
| using System.Data ; |
| using Microsoft.Win32 ; public c | lass Form1 : Form |
| { |
| private System.Compo | nentModel.Container componen | ts ; |
| private ListBox listBox1 ; |
| private Button button1 ; |
| public Form1 ( ) |
| { |
| InitializeComponent ( ) ; |
| } |
| //清除在程序中使用过的资源 |
| public override void Dispose ( ) |
| { |
| base.Dispose ( ) ; |
| components.Dispose ( ) ; |
| } |
| //初始化程序中使用到的组件 |
| private void InitializeComponent ( ) |
| { |
| this.components = ne | w System.ComponentModel.Cont | ainer ( ) ; |
| this.button1 = new Button ( ) ; |
| this.listBox1 = new ListBox ( ) ; |
| button1.Location = new System.Dr | awing.Point ( 16 , 320 ) ; |
| button1.Size = new System.Drawin | g.Size ( 75 , 23 ) ; |
| button1.TabIndex = 0 ; |
| button1.Text = "读取注册表" ; |
| button1.Click += new | System.EventHandler( this.b | utton1_Click ) ; |
| listBox1.Location = | new System.Drawing.Point ( 1 | 6 , 32 ) ; |
| listBox1.Size = new | System.Drawing.Size ( 496 , | 264 ) ; |
| listBox1.TabIndex = 1 ; |
| this.Text = "读取主测表信息" ; |
| this.AutoScaleBaseSi | ze = new System.Drawing.Size | ( 5 , 13 ) ; |
| this.ClientSize = ne | w System.Drawing.Size ( 528 | , 357 ) ; |
| this.Controls.Add( this.listBox1 ) ; |
| this.Controls.Add ( this.button1 ) ; |
| } |
| protected void button1_Click ( o | bject sender , System.EventArgs e ) |
| { |
| listBox1.Items.Clear ( ) ; |
| RegistryKey hklm = R | egistry.LocalMachine ; |
| RegistryKey software | = hklm.OpenSubKey ( "SYSTEM | " ) ; |
| //打开"SYSTEM"子键 |
| RegistryKey no1 = software.OpenS | ubKey ( "001" ) ; |
| //打开"001"子键 |
| RegistryKey no2 = no | 1.OpenSubKey ( "002" ) ; |
| //打开"002"子键 |
| foreach ( string site in no2.Get | SubKeyNames ( ) ) |
| //开始遍历由子键名称组成的字符串数组 |
| { |
| listBox1.Items.Add ( site ) ; |
| //在列表中加入子键名称 |
| RegistryKey sitekey | = no2.OpenSubKey ( site ) ; |
| //打开此子键 |
| foreach ( string sVa | lName in sitekey.GetValueNam | es ( ) ) |
| //开始遍历由指定子键拥有的键值名称组成的字符串数组 |
| { |
| listBox1.Items.Add ( "" + sValNa | me + ": " + sitekey.GetValue ( sValName ) ) ; |
| //在列表中加入键名称和对应的键值 |
| } |
| } |
| } |
| public static void Main ( ) |
| { |
| Application.Run ( new Form1 ( ) ) ; |
| } |
| } |
| 四.总结: |
| 用Visual C#来读取注 实现的。在这二个类中还定 起本文介绍的读取方法、打 在以后的文章中进行。 | 册表中的注册信息是通过名称空 义了对注册表信息的删除、修改 开方法来说,更具有破坏性,但 | 间Micorsoft.Win32中的二个类来 和重命名的一些方法。这些方法比 也更实用。对应这些方法的介绍将 |
| 通过以上的介绍,我们发现用Visual 情。事情虽然是轻松的,但我也要提醒各 一次对注册表进行操作之前,一定要备份 操作都可能导致你的系统崩溃。 | C#来处理注册表,其实是一件比较轻松而简单的事 位,由于注册表在视窗系统中的重要作用,所以在每 ,在操作的时候也要非常小心,因为你的每一次的误 |