分享
 
 
 

C#如何获取注册表某个键的子建

王朝知道·作者佚名  2011-11-24
窄屏简体版  字體: |||超大  
 
分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
 
問題描述:

比如注册表中的Current User中有Software,那么怎么把Software键下的所有子键一一列举出来呢

谢谢

參考答案:

由于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"的键值。具体如下图所示:

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

在下面介绍的程序中,主要的功能是用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 )以及编译后的程序运行界面:

以下是程序运行的界面:

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

}

}

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有