分类

  • 软件天地

  • 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#来处理注册表,其实是一件比较轻松而简单的事
    位,由于注册表在视窗系统中的重要作用,所以在每
    ,在操作的时候也要非常小心,因为你的每一次的误


    上一页 下一页




    map