新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → Vsiaul C#如何读取注册信息 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 2372 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Vsiaul C#如何读取注册信息 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 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]
    上一篇
    返回上一页
    回到目录
    回到页首
    下一篇


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/9 2:25:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/12/27 17:52:09

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    46.875ms