金桥科普  
设为首页 关于我们 邮箱登录
科普聚焦时代科技科普生活科学技术自然科学航空航天科技博览历史考古电脑IT
您现在的位置: 首页 >> 科普频道 >> 技巧实践 >> 文章详情
如何用Visual C#修改注册信息

王天  赛迪网 2002-02-20


    由于Visual C#本身没有类库,是通过.Net FrameWork SDK(软件开发包)定义的一些类来实现对注册表的操作的。这就是名称空间Microsoft.Win32中封装的二个类:Registry类和RegistryKey类。在RegistryKey类中定义了二个方法用来创建注册表中的主键、子键和键值。它们是CreateSubValue ( )方法和SetValue ( )方法。那么如何用Visual C#来修改注册信息?在本文中,我们只介绍修改注册表中的键值的方法。而对于主键和子键,由于.Net FrameWork SDK中还没有定义这方面的方法,所以还无法完成安全的修改注册表中的信息。

    一.Visual C#创建和修改注册信息要调用的两个方法 

   (1)CreateSubKey ( String key )方法:此方法是创建以后面的字符串为名称的子键。当然这种方法不仅能够创建子键,在下面介绍的程序中,也通过此种方法来创建一个主键。 

   (2)SetValue ( String name , String keyvalue )方法:此方法的作用有二,一是可以用来重命名键值的数值,一是可以用来创建新的键值。具体情况为:当打开的子键中,如果存在此键值,就把新值赋给他,实现重命名操作。如果不存在,则创建一个新的键值。 

    二.程序设计和运行环境以及要准备的工作 

  I>视窗系统2000服务器版 

  II>.Net FrameWork SDK Beta 2版 

  III>由于在程序中,要修改一个已经存在的键值,所以就要预先设置好键值所在的位置。打开注册表的编辑器,在"HKEY_LOCAL_MACHINE"主键下面的"HARDWARE"子键下面创建"aaa"子键并在此子键下面创建一个名称为"bbb"的键值。具体如下图所示: 



              图1:为程序设置的注册表的结构图示 

    三.程序的主要功能以及设计的重要步骤 

  在下面介绍的程序中,主要的功能是用Visual C#在注册表中创建一个主键、一个子键和修改一个指定的键值。其中要创建的子键的结构层次是在主键"HKEY_LOCAL_MACHIN"下面的"HAREWARE"主键下,名称为"ddd",其中包含一个键值,名称为"www",键值的值为"1234"。 

    其中的要创建的主键的结构层次也是在主键"HKEY_LOCAL_MACHIN"下面的"HAREWARE"主键下,名称为"main",在此主键下面包含一个名称为"sub"的子键和名称为"value"键值,键值的值为"1234"。下面就来着重介绍Visual C#是如何创建和修改这些主键、子键和键值的。 

   (1)如何创建一个子键,在程序中是结合CreateSubKey ( )方法和SetValue ( )方法来实现的,以下是程序中创建子键的源程序: 

  listBox1.Items.Clear ( ) ;
  RegistryKey hklm = Registry.LocalMachine ;
  RegistryKey software = hklm.OpenSubKey ( "HARDWARE" , true ) ;
  RegistryKey main1 = software.CreateSubKey ( "main" ) ;
  RegistryKey ddd = main1.CreateSubKey ( "sub" ) ;
  ddd.SetValue ( "value" , "1234" ); 

   (2)如何创建一个主键,创建一个主键和创建一个子键的过程大致是差不多的。由于主键包含若干子键,所以在创建主键的时候必须注意他们的层次关系。下面这一段程序,在参考的时候,请注意一下main键和sub键之间的关系。 

  listBox1.Items.Clear ( ) ;
  RegistryKey hklm = Registry.LocalMachine ;
  RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
  RegistryKey main1 = software.CreateSubKey ( "main" ) ;
  RegistryKey ddd = main1.CreateSubKey ( "sub" ) ;
  ddd.SetValue ( "value" , "1234" ) ; 

   (3)如何修改注册信息。由于注册表中的信息十分重要,所以一般不要对其进行写的操作。也可能是这个原因,在.Net FrameWork SDK 中并没有提供修改注册表键的方法。而只是提供了一个危害性相对较小的方法--SetValue ( ),通过这个方法,我们可以来修改键值。下面程序代码是修改一个指定键值名称的键值。当然由于SetValue( )方法的特性,如果它检测到这个键值不存在,就会创建一个新的键值。 

  listBox1.Items.Clear ( ) ;
  RegistryKey hklm = Registry.LocalMachine ;
  RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
  RegistryKey dddw = software.OpenSubKey ( "aaa" , true ) ;
  dddw.SetValue ( "bbb" , "abcd" ) ; 

    四.本文中源程序代码( reg.cs )以及编译后的程序运行界面: 
    以下是程序运行的界面: 



                图2:本文中介绍的程序运行界面 

    reg.cs程序代码如下: 

  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 ;
  private Button button2 ;
  private Button button3 ;
  private Button button4 ;

  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 ( 90 , 23 ) ;
  button1.TabIndex = 0 ;
  button1.Text = "读取注册表" ;
  button1.Click += new System.EventHandler ( this.button1_Click ) ;

  this.button2 = new Button ( ) ;
  button2.Location = new System.Drawing.Point ( 116 , 320 ) ;
  button2.Size = new System.Drawing.Size ( 90 , 23 ) ;
  button2.TabIndex = 1 ;
  button2.Text = "创建子键" ;
  button2.Click += new System.EventHandler ( this.button2_Click ) ;

  this.button3 = new Button ( ) ;
  button3.Location = new System.Drawing.Point ( 216 , 320 ) ;
  button3.Size = new System.Drawing.Size ( 90 , 23 ) ;
  button3.TabIndex = 2 ;
  button3.Text = "创建主键" ;
  button3.Click += new System.EventHandler ( this.button3_Click ) ;

  this.button4 = new Button ( ) ;
  button4.Location = new System.Drawing.Point ( 316 , 320 ) ;
  button4.Size = new System.Drawing.Size ( 90 , 23 ) ;
  button4.TabIndex = 3 ;
  button4.Text = "重命名键值" ;
  button4.Click += new System.EventHandler ( this.button4_Click ) ;

  listBox1.Location = new System.Drawing.Point ( 16 , 32 ) ;
  listBox1.Size = new System.Drawing.Size ( 496 , 264 ) ;
  listBox1.TabIndex = 4 ;
  this.Text = "用Visual C#来创建和修改注册表中的注册信息!" ;
  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 ) ;
  this.Controls.Add ( this.button2 ) ;
  this.Controls.Add ( this.button3 ) ;
  this.Controls.Add ( this.button4 ) ;
  }
  //以列表形式显示"HARDWARE"下面一层的子键和键值
  protected void button1_Click ( object sender , System.EventArgs e )
  {
  listBox1.Items.Clear ( ) ;
  RegistryKey hklm = Registry.LocalMachine ;
  RegistryKey software = hklm.OpenSubKey ( "HARDWARE" ) ;
  //打开"SYSTEM"子键
  foreach ( string site in software.GetSubKeyNames ( ) )
  //开始遍历由子键名称组成的字符串数组
  {
  listBox1.Items.Add ( site ) ;
  //在列表中加入子键名称
  RegistryKey sitekey = software.OpenSubKey ( site ) ;
  //打开此子键
  foreach ( string sValName in sitekey.GetValueNames ( ) )
  //开始遍历由指定子键拥有的键值名称组成的字符串数组
  {
  listBox1.Items.Add ( " " + sValName + ": " + sitekey.GetValue ( sValName ) ) ;
  //在列表中加入键名称和对应的键值
  }
  }
  }
  //创建子键和键值
  protected void button2_Click ( object sender , System.EventArgs e )
  {
  listBox1.Items.Clear ( ) ;
  RegistryKey hklm = Registry.LocalMachine ;
  RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
  RegistryKey ddd = software.CreateSubKey ( "ddd" ) ;
  ddd.SetValue ( "www" , "1234" );
  }
  //创建一个主键并创建一个键值
  protected void button3_Click ( object sender , System.EventArgs e )
  {
  listBox1.Items.Clear ( ) ;
  RegistryKey hklm = Registry.LocalMachine ;
  RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
  RegistryKey main1 = software.CreateSubKey ( "main" ) ;
  RegistryKey ddd = main1.CreateSubKey ( "sub" ) ;
  ddd.SetValue ( "value" , "1234" ) ;
  }
  //重命名一个存在的键值
  protected void button4_Click ( object sender , System.EventArgs e )
  {
  listBox1.Items.Clear ( ) ;
  RegistryKey hklm = Registry.LocalMachine ;
  RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
  RegistryKey dddw = software.OpenSubKey ( "aaa" , true ) ;
  dddw.SetValue ( "bbb" , "abcd" ) ;
  }
  public static void Main ( )
  {
  Application.Run ( new Form1 ( ) ) ;
  }
  } 


  发表评论 写信给编辑 关闭窗口
同栏目内容
· 让你的电脑启动画面绚起来 2007-09-12
· 小技巧帮大忙 极点五笔 2007-09-05
· 如何提高迅雷的下载速度? 2007-09-03
· Vista小技巧 消除红眼 2007-09-03
· 千千静听实用小功能 2007-08-29
· 四大妙招帮你成功的隐藏文件 2007-08-20
相关内容
近期主推
西藏发现青藏高原最大冰川群
·西藏发现青藏高原最大冰川群
·中日: "月亮女神"携手"嫦娥"
·行星大碰撞砸死恐龙催生人类
·美研制会飞汽车定价9万美元
·美国教授设计出自适应机器人
·银河系可能有20多个黑洞
近期热门
英海域惊现大龙虾为普通龙虾5倍
·英海域惊现大龙虾为普通龙虾5倍
·新物种金蛙体表有剧毒
·我国嫦娥工程计划测量月球
·精神病药物可治多种癌症
·视觉震撼:来自海底的精灵
·能删除不良记忆的药物诞生
近期焦点
广西发现罕见溶洞钟乳石有30万年
·广西发现罕见溶洞钟乳石有30万年
·澳大利亚惊现“卡布基诺”海滩
·美国"彩色"瀑布夜幕下震撼游人
·地球上究竟有多少个物种
·英国探险家北极游泳破纪录
·世界之最 世上最小的动物
金桥科普是一个公益性栏目,内容由作者提供或摘自互联网,其目的是向广大网民普及科学技术知识。如果您发现本网站转载或摘编了您拥有著作权的作品,请通知我们(电话:023-63659911),我们立即删除。
关于我们 | 网站地图 | 用户注册 | 广告客户 | 招聘信息 | 业务信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重庆科技咨询中心.重庆网得信息技术有限公司.版权所有
Email:webmaster@jqinfo.com
重庆数据通信局提供网络带宽. 渝ICP备05002327号