• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

C#如何读取注册表中的注册信息

发布: 2007-5-26 13:55 | 作者: 佚名 | 来源: 互连网 | 查看: 185次 | 进入软件测试论坛讨论

领测软件测试网
  一.初步认识注册表:
  单击"开始/运行",在"打开"的后面填入"regedit"。就可以看到注册表的数据结构了。如下图。注:Regedit文件是微软公司提供给用户编辑注册表的一个工具。
  
  在注册表中称为"主键",据图可见,"主键"是有层次结构的。主键的下一级主键称为该主键的"子键"。每一个主键可以对拥有多个子键。如图所示,右边的这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一个庞大的数据库,在其中每一个主键,每一个键值都赋予了不同的功能。
  
  二.Visual C#如何读取注册表中的主键和键值:
  在.Net FrameWork SDK Beta 2版中,有一个Microsoft.Win32的名称空间,在此名称空间中提供了二个用于注册表操作的类:Registry类、RegistryKey类。这二个类都是封闭类,不可以继承。在这二个类,定义了许多关于注册表的方法和属性,通过调用这二个类,在Visual C#中就可以比较轻松的处理关于注册表的各种操作了。
  (1).Registry类:
  此类主要封装了七个公有的静态域,而这些静态域分别代表这视窗注册表中的七个基本的主键,具体如下所示:
  Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键
  Registry.CurrentUser 对应于HKEY_CURREN主键
  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)在运行程序前的一些必要的处理工作:
  在程序设计时,主要功能是读取已经存在的主键键值,用户可以按照下图所示的结构新建若干个主键和对应的键值:
  
  这里有必要说明的是图上只显示了"新项 #3"子键对应的键值。在"新项 #2"子键也有键值,对应的键值是:"新值#1"为"001","新值 #2"为"002"。在"新项 #1"子键中对应的键值是:"新值 #1"为"aaa","新值 #2"为"bbb"。
  (3).程序的主要功能:
  程序的主要功能是读取指定主键下面的所有子键和子键拥有的键值,并以列表的形式按层次显示出来:
  
  
  (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 ( ) ;
  components.Dispose ( ) ;
  }
  //初始化程序中使用到的组件
  private void InitializeComponent ( )
  {
  this.components = new System.ComponentModel.Container ( ) ;
  this.button1 = new Button ( ) ;
  this.listBox1 = new ListBox ( ) ;
  button1.Location = new System.Drawing.Point ( 16 , 320 ) ;
  button1.Size = new System.Drawing.Size ( 75 , 23 ) ;
  button1.TabIndex = 0 ;
  button1.Text = "读取注册表" ;
  button1.Click += new System.EventHandler( this.button1_Click ) ;
  listBox1.Location = new System.Drawing.Point ( 16 , 32 ) ;
  listBox1.Size = new System.Drawing.Size ( 496 , 264 ) ;
  listBox1.TabIndex = 1 ;
  this.Text = "读取主测表信息" ;
  this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;
  this.ClientSize = new System.Drawing.Size ( 528 , 357 ) ;
  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#来处理注册表,其实是一件比较轻松而简单的事情。事情虽然是轻松的,但我也要提醒各位,由于注册表在视窗系统中的重要作用,所以在每一次对注册表进行操作之前,一定要备份,在操作的时候也要非常小心,因为你的每一次的误操作都可能导致你的系统崩溃。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网