-
c# 操纵注册表
注册表的作用显而易见,通过操纵注册表可以很快捷、方便的决解问题,下面模仿“注册表编辑器”列出系统信息。
通过RegistryKey类的GetSubKeyNames方法读取子键信息列表,实现将5大根键的子键信息读取出来,放在TreeView控件中,程序代码如下。 privatevoidBanding()
{
this.TVRegedit.Nodes.Clear();
RegistryKeyrkRoot=Registry.ClassesRoot;
RegistryKeyrkUse=Registry.CurrentUser;
RegistryKeyrkMachine=Registry.LocalMachine;
RegistryKeyrkUsers=Registry.Users;
RegistryKeyrkConfig=Registry.CurrentConfig;
TreeNodetRoot=newTreeNode("HKEY_CLASSES_ROOT");
foreach(stringsiinrkRoot.GetSubKeyNames())
{
tRoot.Nodes.Add(si.ToString());
}
TreeNodetUse=newTreeNode("HKEY_CURRENT_USER");
foreach(stringsiinrkUse.GetSubKeyNames())
{
tUse.Nodes.Add(si.ToString());
}
TreeNodetMachine=newTreeNode("HKEY_LOCAL_MACHINE");
foreach(stringsiinrkMachine.GetSubKeyNames())
{
tMachine.Nodes.Add(si.ToString());
}
TreeNodetUsers=newTreeNode("HKEY_USERS");
foreach(stringsiinrkUsers.GetSubKeyNames())
{
tUsers.Nodes.Add(si.ToString());
}
TreeNodetConfig=newTreeNode("HKEY_CURRENT_CONFIG");
foreach(stringsiinrkConfig.GetSubKeyNames())
{
tConfig.Nodes.Add(si.ToString());
}
this.TVRegedit.Nodes.Add(tRoot);
this.TVRegedit.Nodes.Add(tUse);
this.TVRegedit.Nodes.Add(tMachine);
this.TVRegedit.Nodes.Add(tUsers);
this.TVRegedit.Nodes.Add(tConfig);
}
通过Registry 类的SetValue方法,完成创建子键同时为子键创建键值项以及设置键值。代码如下:privatevoidbutton1_Click(objectsender,EventArgse)
{
//设默认值
string
keyName=this.label2.Text.Trim().ToString()+""+this.textBox1.
Text.Trim().ToString();
objectobj=(object)this.textBox2.Text.Trim();
stringstrName=this.textBox3.Text.Trim().ToString();
if(strReader!=string.Empty)
{
switch(strReader)
{
case"one":
{
Registry.SetValue(keyName,strName,obj,
RegistryValueKind.String);
break;
}
case"four":
{
Registry.SetValue(keyName,strName,obj,
RegistryValueKind.ExpandString);
break;
}
}
this.Banding();
}
else
{
MessageBox.Show("请选择创建方式(例如字符串型)");
}
}
通过RegistryKey类的GetValue方法,实现键值项与键值的读取。为了方便学习,笔者在读键值时只取出其中一个值。代码如下: privatevoidbutton5_Click(objectsender,EventArgse)
{
stringstr=this.label2.Text.Trim().ToString();
stringdefalutResut;
if(str.IndexOf("")!=-1)
{
defalutResut=str.Substring(0,str.IndexOf(""));
str=str.Substring(str.IndexOf("")+1);
}
else
{
defalutResut=str;
}
switch(defalutResut)
{
case"HKEY_CLASSES_ROOT":
{
rkey=Registry.ClassesRoot;
break;
}
case"HKEY_CURRENT_USER":
{
rkey=Registry.CurrentUser;
break;
}
case"HKEY_LOCAL_MACHINE":
{
rkey=Registry.LocalMachine;
break;
}
case"HKEY_USERS":
{
rkey=Registry.Users;
break;
}
case"HKEY_CURRENT_CONFIG":
{
rkey=Registry.CurrentConfig;
break;
}
}
try
{
RegistryKeyrkeyS=rkey.OpenSubKey(str);
if(rkeyS.ValueCount>0)
{
foreach(stringstrValueinrkeyS.GetValueNames())
{
MessageBox.Show(strValue+"项的值是:"+
rkeyS.GetValue(strValue).ToString());
break;
}
}
else
{
MessageBox.Show("无显示值");
}
}
catch
{
MessageBox.Show("无显示值");
}
}
通过Registry 类的DeleteSubKeyTree方法实现删除子键的功能。代码如下:
privatevoidbutton4_Click(objectsender,EventArgse)
{
stringstr=this.label2.Text.Trim().ToString();
str=str.Substring(str.IndexOf("")+1);
Registry.CurrentConfig.DeleteSubKeyTree(str);
this.Banding();
}