vsiaul c#如何读取注册信息_c#应用

2008-02-23 05:46:35来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

从视窗95开始,微软公司就在Windows中引入了注册表这个概念。注册表到底是什么东东呢?他是Windows的一个核心的数据库,在这个数据库中存放中和系统相关的各种参数,这些参数直接控制中系统的启动、硬件的驱动程式安装信息连同在Windows上运行的各种应用程式的注册信息等。这就意味着,假如注册表因为某些原因受到了破坏,轻者是Windows启动过程出现异常,重者就有可能导致整个系统的完全瘫痪。所以正确的认识注册表,及时的备份注册表,对于视窗用户就显得相当重要。
Vsiaul C#就能够十分方便、简洁的研发出操作注册表的程式。本文就是介绍如何利用VisualC#来读取注册表中的信息。

一.初步认识注册表:
单击"开始/运行",在"打开"的后面填入"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类:
此类中主要封装了对Windows注册表的基本操作。在程式设计中,首先通过Registry类找到注册表中的基本主键,然后通过RegistryKey类,来找其下面的子键和处理具体的操作的。

三.通过一个读取注册表信息例子来具体说明这二个来的用法:

(1).程式设计和运行的环境:
IWindows2000服务器版

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 = Registry.LocalMachine ;
//打开"SYSTEM"子键
RegistryKey software = hklm.OpenSubKey ( "SYSTEM" ) ;
//打开"001"子键
RegistryKey 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 ( ) ;
}
//清除在程式中使用过的资源
public override void Dispose ( )
{
base.Dispose ( ) ;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 使用c#研发用户控制_c#应用

下一篇: 用visual c#来增加数据记录(1)_c#应用