-- 作者:admin
-- 发布时间:11/9/2004 2:25:00 AM
-- Vsiaul C#如何读取注册信息
发信人: cataract (大瀑布来啦), 信区: DotNET 标 题: Vsiaul C#如何读取注册信息 发信站: BBS 水木清华站 (Tue Dec 11 10:45:15 2001) 发信人: xixixi (wenwen), 信区: dotNET 标 题: Vsiaul C#如何读取注册信息 发信站: 飘渺水云间 (Sun Dec 9 21:16:00 2001), 转信 从视窗95开始,微软公司就在视窗系统中引入了注册表这个概念。注册表到底是什 么东 东呢?它是视窗系统的一个核心的数据库,在这个数据库中存放中与系统相关的各 种参 数,这些参数直接控制中系统的启动、硬件的驱动程序安装信息以及在视窗系统上 运行 的各种应用程序的注册信息等。这就意味着,如果注册表因为某些原因受到了破坏 ,轻 者是视窗系统启动过程出现异常,重者就有可能导致整个系统的完全瘫痪。所以正 确的 认识注册表,及时的备份注册表,对于视窗用户就显得相当重要。 Vsiaul C#就可以十分方便、简洁的开发出操作注册表的程序。本文就是介绍如何 利用V isualC#来读取注册表中的信息。 一.初步认识注册表: 单击"开始/运行",在"打开"的后面填入"regedit"。就可以看到注册表的数据结构 了。 如下图。注:Regedit文件是微软公司提供给用户编辑注册表的一个工具。 点击小图放大,图01:注册表结构图示 如上图左边的部分在注册表中称为"主键",据图可见,"主键"是有层次结构的。主 键的 下一级主键称为该主键的"子键"。每一个主键可以对拥有多个子键。如图所示,右 边的 这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一 个庞 大的数据库,在其中每一个主键,每一个键值都赋予了不同的功能。 二.Visual C#如何读取注册表中的主键和键值: 在.Net FrameWork SDK Beta 2版中,有一个Microsoft.Win32的名称空间,在此名 称空 间中提供了二个用于注册表操作的类:Registry类、RegistryKey类。这二个类都 是封闭 类,不可以继承。在这二个类,定义了许多关于注册表的方法和属性,通过调用这 二个 类,在Visual C#中就可以比较轻松的处理关于注册表的各种操作了。 (1).Registry类: 此类主要封装了七个公有的静态域,而这些静态域分别代表这视窗注册表中的七个 基本 的主键,具体如下所示: Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键 Registry.CurrentUser 对应于HKEY_CURRENT_USER主键 Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键 Registry.User 对应于 HKEY_USER主键 Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键 Registry.DynDa 对应于HKEY_DYN_DATA主键 Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键 (2).RegistryKey类: 此类中主要封装了对视窗系统注册表的基本操作。在程序设计中,首先通过 Registry类 找到注册表中的基本主键,然后通过RegistryKey类,来找其下面的子 如上图左边的部分在注册表中称为"主键",据图可见,"主键"是有层次结构的。主 键的 下一级主键称为该主键的"子键"。每一个主键可以对拥有多个子键。如图所示,右 边的 这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一 个庞 大的数据库,在其中每一个主键,每一个键值都赋予了不同的功能。 二.Visual C#如何读取注册表中的主键和键值: 在.Net FrameWork SDK Beta 2版中,有一个Microsoft.Win32的名称空间,在此名 称空 间中提供了二个用于注册表操作的类:Registry类、RegistryKey类。这二个类都 是封闭 类,不可以继承。在这二个类,定义了许多关于注册表的方法和属性,通过调用这 二个 类,在Visual C#中就可以比较轻松的处理关于注册表的各种操作了。 (1).Registry类: 此类主要封装了七个公有的静态域,而这些静态域分别代表这视窗注册表中的七个 基本 的主键,具体如下所示: Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键 Registry.CurrentUser 对应于HKEY_CURRENT_USER主键 Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键 Registry.User 对应于 HKEY_USER主键 Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键 Registry.DynDa 对应于HKEY_DYN_DATA主键 Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键 (2).RegistryKey类: 此类中主要封装了对视窗系统注册表的基本操作。在程序设计中,首先通过 Registry类 找到注册表中的基本主键,然后通过RegistryKey类,来找其下面的子键和处理具 体的操 作的。 三.通过一个读取注册表信息例子来具体说明这二个来的用法: (1).程序设计和运行的环境: I视窗系统2000服务器版 II Net FrameWork SDK Beta 2版 (2)在运行程序前的一些必要的处理工作: 在程序设计时,主要功能是读取已经存在的主键键值,用户可以按照下图所示的结 构新 建若干个主键和对应的键值: 点击小图放大,图02:程序设计中要读取的注册表的信息 这里有必要说明的是上图只显示了"新项 #3"子键对应的键值。在"新项 #2"子键 也有 键值,对应的键值是:"新值#1"为"001","新值 #2"为"002"。在"新项 #1"子 键中对 应的键值是:"新值 #1"为"aaa","新值 #2"为"bbb"。 (3).程序的主要功能: 程序的主要功能是读取指定主键下面的所有子键和子键拥有的键值,并以列表的形 式按 层次显示出来,下图是本程序运行后界面: 点击小图放大,图03:读取注册表信息并以列表形式显示出来 (4).程序设计过程中的重要步骤以及应该注意的一些问题: I 程序中读取主键、子键和键值所使用到的方法: 程序中为了读取指定主键下面的子键和子键中拥有的键值,主要使用了 RegistryKey类中 的四个方法:OpenSubKey,GetSubKeyNames,GetValueNames,GetValue。具体的 用法和 意思如下: OpenSubKey ( string name )方法主要是打开指定的子键。 GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字 符串 数组。 GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个 字符串 数组。 GetValue ( string name )方法是指定键的键值。 程序中具体的使用语句如下: RegistryKey hklm = Regi嵌寥∫丫嬖诘闹骷担没Э梢园凑障峦妓镜慕 峁剐? 建若干个主键和对应的键值: 点击小图放大,图02:程序设计中要读取的注册表的信息 这里有必要说明的是上图只显示了"新项 #3"子键对应的键值。在"新项 #2"子键 也有 键值,对应的键值是:"新值#1"为"001","新值 #2"为"002"。在"新项 #1"子 键中对 应的键值是:"新值 #1"为"aaa","新值 #2"为"bbb"。 (3).程序的主要功能: 程序的主要功能是读取指定主键下面的所有子键和子键拥有的键值,并以列表的形 式按 层次显示出来,下图是本程序运行后界面: 点击小图放大,图03:读取注册表信息并以列表形式显示出来 (4).程序设计过程中的重要步骤以及应该注意的一些问题: I 程序中读取主键、子键和键值所使用到的方法: 程序中为了读取指定主键下面的子键和子键中拥有的键值,主要使用了 RegistryKey类中 的四个方法:OpenSubKey,GetSubKeyNames,GetValueNames,GetValue。具体的 用法和 意思如下: OpenSubKey ( string name )方法主要是打开指定的子键。 GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字 符串 数组。 GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个 字符串 数组。 GetValue ( string name )方法是指定键的键值。 程序中具体的使用语句如下: RegistryKey hklm = Registry.LocalMachine ; ; //在列表中加入键名称和对应的键值 } }egistryKey no1 = software.OpenSubKey ( "001" ) ; //打开"002"子键 RegistryKey no2 = no1.OpenSubKey ( "002" ) ; 其中listBox1是程序中定义了的列表名称。 II 如何用列表形式显示注册信息: 由于GetSubKeyNames ( )方法和GetValueNames ( )方法的返回值是字符串数组, 所以在 程序中是通过foreach语句实现遍历这些字符串数组的。并且在遍历的时候,就通 过列表 形式显示出来,程序中具体实现语句如下: foreach ( string site in no2.GetSubKeyNames ( ) ) //开始遍历由子键名称组成的字符串数组 { listBox1.Items.Add ( site ) ; //在列表中加入子键名称 RegistryKey sitekey = no2.OpenSubKey ( site ) ; //打开此子键 foreach ( string sValName in sitekey.GetValueNames ( ) ) //开始遍历由指定子键拥有的键值名称组成的字符串数组 { listBox1.Items.Add ( "" + sValName + ": " + sitekey.GetValue ( sValName ) ) ; //在列表中加入键名称和对应的键值 } } (5).源程序代码: 通过以上的论述,我们可以得到程序的源程序代码,具体如下: using System ; using System.Drawing ; using System.Collections ; using System.ComponentModel ; using System.Windows.Forms ; using System.Data ; using Microsoft.Win32 ; public class Form1 : Form { private System.ComponentModel.Container components ; private ListBox listBox1 ; private Button button1 ; public Form1 ( ) { InitializeComponent ( ) ; } //清除在程序中使用过的资源 this.Controls.Add( this.listBox1 ) ; this.Controls.Add ( this.button1 ) ; } protected void button1_Click ( object sender , System.EventArgs e ) { listBox1.Items.Clear ( ) ; RegistryKey hklm = Registry.LocalMachine ; RegistryKey software = hklm.OpenSubKey ( "SYSTEM" ) ; //打开"SYSTEM"子键 RegistryKey no1 = software.OpenSubKey ( "001" ) ; //打开"001"子键 RegistryKey no2 = no1.OpenSubKey ( "002" ) ; //打开"002"子键 foreach ( string site in no2.GetSubKeyNames ( ) ) //开始遍历由子键名称组成的字符串数组 { listBox1.Items.Add ( site ) ; //在列表中加入子键名称 RegistryKey sitekey = no2.OpenSubKey ( site ) ; //打开此子键 foreach ( string sValName in sitekey.GetValueNames ( ) ) //开始遍历由指定子键拥有的键值名称组成的字符串数组 { listBox1.Items.Add ( "" + sValName + ": " + sitekey.GetValue ( sValName ) ) ; //在列表中加入键名称和对应的键值 } } } public static void Main ( ) { Application.Run ( new Form1 ( ) ) ; } } 四.总结: 用Visual C#来读取注册表中的注册信息是通过名称空间Micorsoft.Win32中的二个 类来 实现的。在这二个类中还定义了对注册表信息的删除、修改和重命名的一些方法。 这些 方法比起本文介绍的读取方法、打开方法来说,更具有破坏性,但也更实用。对应 这些 方法的介绍将在以后的文章中进行。 通过以上的介绍,我们发现用Visual C#来处理注册表,其实是一件比较轻松而简 单的事 情。事情虽然是轻松的,但我也要提醒各位,由于注册表在视窗系统中的重要作用 ,所 以在每一次对注册表进行操作之前,一定要备份,在操作的时候也要非常小心,因 为你 的每一次的误操作都可能导致你的系统崩溃。 -- 如果我曾伤了你,就让我说声对不起 虽然想要再见你,也只能在梦里 想起你离去时的背影,你似乎也在哭泣 究竟有什么原因,非要我们分隔两地 在我的心里只有一句我爱你 就算全世界都没有人愿意听 ※ 来源:·飘渺水云间 Freecity.dhs.org·[FROM: xixixi] -- ※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.214.13] 上一篇 返回上一页 回到目录 回到页首 下一篇
|