C#读写注册表 - 韩显川 - 博客园

C#读写注册表

帖子来自:http://hi.baidu.com/kingboy_wrx/blog/item/1fd820977848f56b54fb96f6.html
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主键

RegistryKey类封装了对注册表的基本操作,包括读取,写入,删除。其中读取的主要函数有:

OpenSubKey ( string name )方法主要是打开指定的子键。
  GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字符串数组。
  GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个字符串数组。
  GetValue ( string name )方法是指定键的键值。

写入的函数有:

CreateSubKey(string name)方法是增加一个子键

SetValue(string name,string value)方法是设置一个键的键值



删除的函数:

DeleteSubKey ( )方法:删除一个指定的子键。

DeleteSubKeyTree ( )方法:

此方法是彻底删除指定的子键目录,即:删除该子键以及该子键以下的全部子键。
1.IE窗口的动感效果

//-------------------------------------

// ChangeIE.cs ? 2004 by yudehui

//-------------------------------------

using System;

using Microsoft.Win32; //对注册表操作一定要引用这个命名空间

namespace ChangeIE

{

class ChangeIE

{

[STAThread]

static void Main(string[] args)

{

RegistryKey pregkey ;

pregkey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics",true);

if (pregkey==null)

{

Console.WriteLine("键值不存在");

}

else

{

pregkey.SetValue("MinAnimate","1");

pregkey.SetValue("MaxAnimate","1");

Console.WriteLine("修改成功");



}

pregkey. Close;

}

}

}

2.改变IE工具栏的背景

//-------------------------------------

// ChangeIE.cs ? 2004 by yudehui

//-------------------------------------

using System;

using Microsoft.Win32; //对注册表操作一定要引用这个命名空间

namespace ChangeIEbackColor

{

class ChangeIEbackColor

{

[STAThread]

static void Main(string[] args)

{

RegistryKey pregkey ;

pregkey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Internet" +

"Explorer\\Toolbar\\Explorer ",true);

if (pregkey==null)

{

Console.WriteLine("键值不存在");

}

else

{

pregkey.SetValue("BackBitmap","C:\\windows\\Greenstone.bmp");

Console.WriteLine("修改成功");



}

pregkey.Close;

}

}

}
以下从‘读’‘写’‘删除’‘判断’四个事例实现对注册表的简单操作
1.读取指定名称的注册表的值
private string GetRegistData(string name)
{
string registData;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
registData = aimdir.GetValue(name).ToString();
return registData;
}
以上是读取的注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下的XXX目录中名称为name的注册表值;

2.向注册表中写数据
private void WTRegedit(string name,string tovalue)
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.CreateSubKey("XXX");
aimdir.SetValue(name,tovalue);
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下新建XXX目录并在此目录下创建名称为name值为tovalue的注册表项;

3.删除注册表中指定的注册表项
private void DeleteRegist(string name)
{
string[] aimnames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
aimnames = aimdir.GetSubKeyNames();
foreach(string aimKey in aimnames)
{
if(aimKey == name)
aimdir.DeleteSubKeyTree(name);
}
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中删除名称为name注册表项;

4.判断指定注册表项是否存在
private bool IsRegeditExit(string name)
{
bool _exit = false;
string[] subkeyNames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.OpenSubKey("XXX",true);
subkeyNames = aimdir.GetSubKeyNames();
foreach(string keyName in subkeyNames)
{
if(keyName == name)
{
_exit = true;
return _exit;
}
}
return _exit;
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中判断名称为name注册表项是否存
在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断;

 

帖子来自:http://hi.baidu.com/upupto/blog/item/896d3e7b00fa19f70bd1878a.html

 

注册表是视窗系统的一个核心的数据库,在这个数据库中存放中与系统相关的各种参数,这些参数直接控制中系统的启动、硬件的驱动程序安装信息以及在视窗系统上运行的各种应用程序的注册信息等。这就意味着,如果注册表因为某些原因受到了破坏,轻者是视窗系统启动过程出现异常,重者就有可能导致整个系统的完全瘫痪。所以正确的认识注册表,及时的备份注册表,对于视窗用户就显得相当重要。
  C#就可以十分方便、简洁的开发出操作注册表的程序。单击"开始/运行",在"打开"的后面填入"regedit"。就可以看到注册表的数据结构了。"主键"是有层次结构的。主键的下一级主键称为该主键的"子键"。每一个主键可以对拥有多个子键。右边的这些值就是所谓的键值了。每一个主键或者子键都可以拥有多个键值。注册表是一个庞大的数据库,在其中每一个主键,每一个键值都赋予了不同的功能。
  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类,来找其下面的子键和处理具体的操作的。
     下面通过一个读取注册表信息例子来具体说明这二个来的用法。
程序设计和运行的环境:Windows 2000服务器版,.Net FrameWork SDK Beta 2版。
在运行程序前的一些必要的处理工作。在程序设计时,主要功能是读取已经存在的主键键值,用户可以新建若干个主键和对应的键值。
     程序的主要功能是读取指定主键下面的所有子键和子键拥有的键值,并以列表的形式按层次显示出来。程序设计过程中的重要步骤以及应该注意的一些问题:
     程序中读取主键、子键和键值所使用到的方法: 程序中为了读取指定主键下面的子键和子键中拥有的键值,主要使用了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是程序中定义了的列表名称。

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 ) ) ;
  //在列表中加入键名称和对应的键值
 }
}    

通过以上的论述,我们可以得到程序的源程序代码,具体如下:

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 ( ) ) ;
 }
}     

  用C#读取注册表中的注册信息是通过名称空间Micorsoft.Win32中的二个类来实现的。在这二个类中还定义了对注册表信息的删除、修改和重命名的一些方法。这些方法比起本文介绍的读取方法、打开方法来说,更具有破坏性,但也更实用。由于注册表在视窗系统中的重要作用,所以在每一次对注册表进行操作之前,一定要备份,在操作的时候也要非常小心,因为一次的误操作都可能导致系统崩溃。




引文来源   C#读写注册表 - 韩显川 - 博客园

转载于:https://my.oschina.net/gisvg/blog/5725

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值