设为首页收藏本站language 语言切换
查看: 1108|回复: 0
收起左侧

如何用Visual C#来创建、修改注册信息

[复制链接]
发表于 2010-2-25 10:21:30 | 显示全部楼层 |阅读模式
<p >在<ccid_nobr>《如何读取注册信息》和<ccid_nobr>《用Visual C#来删除注册表中的注册信息》文章中,已经探讨了用Visual C#来读取、删除注册表中的注册信息,在本篇文章中我们就来介绍Visual C#注册表编程的另外二个重要的操作:创建注册信息和修改注册信息。在上二篇文章中,我们已经知道,由于Visual C#本身没有类库,他是通过.Net框架中的.Net FrameWork SDK(软件开发包)定义的一些类来实现对注册表的操作。这就是名称空间Microsoft.Win32中封装的二个类:Registry类、RegistryKey类。在RegistryKey类中定义了二个方法用来创建注册表中的主键、子键和键值。他们是CreateSubValue ( )方法和SetValue ( )方法。那么如何用Visual C#来修改注册信息,在本文中,我们只是介绍了修改注册表中的键值的方法。而对于主键和子键,由于.Net FrameWork SDK中还没有定义这方面的方法,所以还无法完成安全的修改注册表中的信息。下面就先介绍如何用Visual C#来创建注册信息。<ccid_nobr><b>一.Visual C#创建和修改注册信息要调用的二个方法:</b></ccid_nobr><p >(1).CreateSubKey ( String key )方法:此方法是创建以后面的字符串为名称的子键。当然这种方法不仅能够创建子键,在下面介绍的程序中,也通过此种方法来创建一个主键。<p >(2).SetValue ( String name , String keyvalue )方法:此方法的作用有二点,一种可以用来重命名键值的数值,一种可以用来创建新的键值。具体情况如下:当打开的子键中,如果存在此键值,就把新值赋给他,实现重命名操作。如果不存在,则创建一个新的键值。<p ><ccid_nobr><b>二.程序设计和运行环境以及要准备的工作:</b></ccid_nobr><p >I>视窗系统2000服务器版<p >II>.Net FrameWork SDK Beta 2版<p >III>由于在程序中,要修改一个已经存在的键值,所以就要预先设置好键值所在的位置。打开注册表的编辑器,在"HKEY_LOCAL_MACHINE"主键下面的"HARDWARE"子键下面创建"aaa"子键并在此子键下面创建一个名称为"bbb"的键值。具体如下图所示:<p ><ccid_nobr><center><img  src="http://www.hh010.com/upload_files/article/244/9_xadhbl10469.gif"><br>图01:为程序设置的注册表的结构图示</center></ccid_nobr><p ><ccid_nobr><b>三.程序的主要功能以及设计的重要步骤:</b></ccid_nobr><p >在下面介绍的程序中,主要的功能是用Visual C#在注册表中创建一个主键、一个子键和修改一个指定的键值。其中要创建的子键的结构层次是在主键"HKEY_LOCAL_MACHIN"下面的"HAREWARE"主键下,名称为"ddd",其中包含一个键值,名称为"www",键值的值为"1234"。<p >其中的要创建的主键的结构层次也是在主键"HKEY_LOCAL_MACHIN"下面的"HAREWARE"主键下,名称为"main",在此主键下面包含一个名称为"sub"的子键和名称为"value"键值,键值的值为"1234"。下面就来着重介绍Visual C#是如何创建和修改这些主键、子键和键值的。<p >(1).如何创建一个子键,在程序中是结合CreateSubKey ( )方法和SetValue ( )方法来实现的,以下是程序中创建子键的源程序:<p ><ccid_nobr><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">listBox1.Items.Clear ( ) ;<br/>RegistryKey hklm = Registry.LocalMachine ;<br/>RegistryKey software = hklm.OpenSubKey ( "HARDWARE" , true ) ;<br/>RegistryKey main1 = software.CreateSubKey ( "main" ) ;<br/>RegistryKey ddd = main1.CreateSubKey ( "sub" ) ;<br/>ddd.SetValue ( "value" , "1234" );</td></tr></table></ccid_nobr><p >(2).如何创建一个主键,创建一个主键和创建一个子键的过程大致是差不多的。由于主键包含若干子键,所以在创建主键的时候必须注意他们的层次关系。下面这一段程序,在参考的时候,请注意一下main键和sub键之间的关系。<p ><ccid_nobr><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">listBox1.Items.Clear ( ) ;<br/>RegistryKey hklm = Registry.LocalMachine ;<br/>RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;<br/>RegistryKey main1 = software.CreateSubKey ( "main" ) ;<br/>RegistryKey ddd = main1.CreateSubKey ( "sub" ) ;<br/>ddd.SetValue ( "value" , "1234" ) ;</td></tr></table></ccid_nobr><p >(3).如何修改注册信息。由于注册表中的信息十分重要,所以一般不要对其进行写的操作。也可能是这个原因,在.Net FrameWork SDK 中并没有提供修改注册表键的方法。而只是提供了一个危害性相对较小的方法--SetValue ( ),通过这个方法,我们可以来修改键值。下面程序代码是修改一个指定键值名称的键值。当然由于SetValue( )方法的特性,如果它检测到这个键值不存在,就会创建一个新的键值。<p ><ccid_nobr><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">listBox1.Items.Clear ( ) ;<br/>RegistryKey hklm = Registry.LocalMachine ;<br/>RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;<br/>RegistryKey dddw = software.OpenSubKey ( "aaa" , true ) ;<br/>dddw.SetValue ( "bbb" , "abcd" ) ;</td></tr></table></ccid_nobr><p ><ccid_nobr><b>四.本文中源程序代码( reg.cs )以及编译后的程序运行界面:</b></ccid_nobr><p >以下是程序运行的界面:<p ><ccid_nobr><center><img  src="http://www.hh010.com/upload_files/article/244/9_nq3fy710470.gif"></center></ccid_nobr><p >图02:本文中介绍的程序运行界面<p >reg.cs程序代码如下:<p ><ccid_nobr><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight="black" bordercolordark="#ffffff"><tr><td bgcolor="e6e6e6" class="code">using System ;<br/>using System.Drawing ;<br/>using System.Collections ;<br/>using System.ComponentModel ;<br/>using System.Windows.Forms ;<br/>using System.Data ;<br/>using Microsoft.Win32 ;<br/>//导入使用到的名称空间<br/><br/>public class Form1 : Form<br/>{<br/>private System.ComponentModel.Container components ;<br/>private ListBox listBox1 ;<br/>private Button button1 ;<br/>private Button button2 ;<br/>private Button button3 ;<br/>private Button button4 ;<br/><br/>public Form1 ( )<br/>{<br/>InitializeComponent ( ) ;<br/>}<br/>//清除在程序中使用过的资源<br/>public override void Dispose ( )<br/>{<br/>base.Dispose ( ) ;<br/>components.Dispose ( ) ;<br/>}<br/>//初始化程序中使用到的组件<br/>private void InitializeComponent ( )<br/>{<br/>this.components = new System.ComponentModel.Container ( ) ;<br/>this.button1 = new Button ( ) ;<br/>this.listBox1 = new ListBox ( ) ;<br/>button1.Location = new System.Drawing.Point ( 16 , 320 ) ;<br/>button1.Size = new System.Drawing.Size ( 90 , 23 ) ;<br/>button1.TabIndex = 0 ;<br/>button1.Text = "读取注册表" ;<br/>button1.Click += new System.EventHandler ( this.button1_Click ) ;<br/><br/>this.button2 = new Button ( ) ;<br/>button2.Location = new System.Drawing.Point ( 116 , 320 ) ;<br/>button2.Size = new System.Drawing.Size ( 90 , 23 ) ;<br/>button2.TabIndex = 1 ;<br/>button2.Text = "创建子键" ;<br/>button2.Click += new System.EventHandler ( this.button2_Click ) ;<br/><br/>this.button3 = new Button ( ) ;<br/>button3.Location = new System.Drawing.Point ( 216 , 320 ) ;<br/>button3.Size = new System.Drawing.Size ( 90 , 23 ) ;<br/>button3.TabIndex = 2 ;<br/>button3.Text = "创建主键" ;<br/>button3.Click += new System.EventHandler ( this.button3_Click ) ;<br/><br/>this.button4 = new Button ( ) ;<br/>button4.Location = new System.Drawing.Point ( 316 , 320 ) ;<br/>button4.Size = new System.Drawing.Size ( 90 , 23 ) ;<br/>button4.TabIndex = 3 ;<br/>button4.Text = "重命名键值" ;<br/>button4.Click += new System.EventHandler ( this.button4_Click ) ;<br/><br/>listBox1.Location = new System.Drawing.Point ( 16 , 32 ) ;<br/>listBox1.Size = new System.Drawing.Size ( 496 , 264 ) ;<br/>listBox1.TabIndex = 4 ;<br/>this.Text = "用Visual C#来创建和修改注册表中的注册信息!" ;<br/>this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;<br/>this.ClientSize = new System.Drawing.Size ( 528 , 357 ) ;<br/>//在窗体中加入组件<br/>this.Controls.Add ( this.listBox1 ) ;<br/>this.Controls.Add ( this.button1 ) ;<br/>this.Controls.Add ( this.button2 ) ;<br/>this.Controls.Add ( this.button3 ) ;<br/>this.Controls.Add ( this.button4 ) ;<br/>}<br/>//以列表形式显示"HARDWARE"下面一层的子键和键值<br/>protected void button1_Click ( object sender , System.EventArgs e )<br/>{<br/>listBox1.Items.Clear ( ) ;<br/>RegistryKey hklm = Registry.LocalMachine ;<br/>RegistryKey software = hklm.OpenSubKey ( "HARDWARE" ) ;<br/>//打开"SYSTEM"子键<br/>foreach ( string site in software.GetSubKeyNames ( ) )<br/>//开始遍历由子键名称组成的字符串数组<br/>{<br/>listBox1.Items.Add ( site ) ;<br/>//在列表中加入子键名称<br/>RegistryKey sitekey = software.OpenSubKey ( site ) ;<br/>//打开此子键<br/>foreach ( string sValName in sitekey.GetValueNames ( ) )<br/>//开始遍历由指定子键拥有的键值名称组成的字符串数组<br/>{<br/>listBox1.Items.Add ( " " + sValName + ": " + sitekey.GetValue ( sValName ) ) ;<br/>//在列表中加入键名称和对应的键值<br/>}<br/>}<br/>}<br/>//创建子键和键值<br/>protected void button2_Click ( object sender , System.EventArgs e )<br/>{<br/>listBox1.Items.Clear ( ) ;<br/>RegistryKey hklm = Registry.LocalMachine ;<br/>RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;<br/>RegistryKey ddd = software.CreateSubKey ( "ddd" ) ;<br/>ddd.SetValue ( "www" , "1234" );<br/>}<br/>//创建一个主键并创建一个键值<br/>protected void button3_Click ( object sender , System.EventArgs e )<br/>{<br/>listBox1.Items.Clear ( ) ;<br/>RegistryKey hklm = Registry.LocalMachine ;<br/>RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;<br/>RegistryKey main1 = software.CreateSubKey ( "main" ) ;<br/>RegistryKey ddd = main1.CreateSubKey ( "sub" ) ;<br/>ddd.SetValue ( "value" , "1234" ) ;<br/>}<br/>//重命名一个存在的键值<br/>protected void button4_Click ( object sender , System.EventArgs e )<br/>{<br/>listBox1.Items.Clear ( ) ;<br/>RegistryKey hklm = Registry.LocalMachine ;<br/>RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;<br/>RegistryKey dddw = software.OpenSubKey ( "aaa" , true ) ;<br/>dddw.SetValue ( "bbb" , "abcd" ) ;<br/>}<br/>public static void Main ( )<br/>{<br/>Application.Run ( new Form1 ( ) ) ;<br/>}<br/>}</td></tr></table></ccid_nobr><p >(责任编辑 <ccid_nobr>尤北</ccid_nobr>)                                 <p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-12 00:22 , Processed in 0.084688 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表