-
c#向注册表写入信息
熟悉计算机的读者都明白注册表的重要性,因为注册表内存储着重要的配置信息,这个重要信息的写入可以通过Registry类实现。
为了使编程人员能够快速的向注册表写入信息,Registry类将注册表中7大主键封装为公有的静态域,而这些静态域分别代表着注册表中的7个基本的主键,这样在向注册表中写入信息时就可以通过Registry类的7个公有的静态域与注册表一一映射。具体描述如表所示。
表 Registry类封装的7个公有的静态域列表
静态域
说明
ClassesRoot
定义文档的类型(或类)以及与那些类型关联的属性。该字段读取Windows注册表基项HKEY_CLASSES_ROOT
CurrentConfig
包含有关非用户特定的硬件的配置信息。该字段读取Windows注册表基项 HKEY_CURRENT_CONFIG
CurrentUser
包含有关当前用户首选项的信息。该字段读取Windows注册表基项 HKEY_CURRENT_USER
DynData
包含动态注册表数据。该字段读Windows注册表基项 HKEY_DYN_DATA
LocalMachine
包含本地计算机的配置数据。该字段读取Windows注册表基项 HKEY_LOCAL_MACHINE
PerformanceData
包含软件组件的性能信息。该字段读取Windows注册表基项 HKEY_PERFORMANCE_DATA
通过Registry类中的GetValue方法、SetValue方法可以实现向注册表中写入信息。
(1)GetValue 方法
检索与指定的注册表项中的指定名称关联的值。如果在指定的项中未找到该名称,则返回您提供的默认值;或者,如果指定的项不存在,则返回空引用。
语法:
publicstaticObjectGetValue
(
stringkeyName,
stringvalueName,
ObjectdefaultValue
)
参数:
keyName:以有效注册表根(如“HKEY_CURRENT_USER”)开头的键的完整注册表路径。
ValueName:名称/值对的名称。
DefaultValue:当 name 不存在时返回的值。
返回值:
如果由 keyName 指定的子项不存在,则返回空引用;否则,返回与 valueName 关联的值;或者,如果未找到 valueName,则返回 defaultValue。
例如,通过GetValueNames方法检索"HKEY_CURRENT_USERAppEventsEventLabels"子键下包含的所有子项,然后检索包含与此名称关联的值;
RegistryKeyrk=Registry.CurrentUser;
RegistryKeysys=rk.OpenSubKey(@"AppEventsEventLabels");
foreach(stringstrinsys.GetSubKeyNames())
{
RegistryKeysikey=sys.OpenSubKey(str);//打开子键
foreach(stringsVNameinsikey.GetValueNames())
{
this.listBox1.Items.Add(sikey.GetValue(sVName));
}
}
(2)SetValue方法
设置指定的注册表项的指定名称/值对。如果指定的项不存在,则创建该项。
语法:
publicstaticvoidSetValue
(
stringkeyName,
stringvalueName,
Objectvalue
)
参数:
keyName:以有效注册表根(如“HKEY_CURRENT_USER”)开头的键的完整注册表路径。
ValueName:名称/值对的名称。
Value:要存储的值。
例如,通过SetValue方法在“HKEY_CURRENT_CONFIG”键下创建一个名为mrsoft的子键,然后在mrsoft子键下添加一个名为mr的键值项同时为这个键值项添加键值(hywork);
Registry.SetValue(“HKEY_CURRENT_CONFIGmrsoft”,“mr”,“hywork”);
示例 写入注册表
向“HKEY_CURRENT_CONFIG”键下写入信息,。
首先硧定要对7个基本主键的那一个主键进行操作,这里以 “HKEY_CURRENT_CONFIG”为例,找到要操作的主键后便可以通过Registry类的SetValue方法将信息写入注册表中,程序代码如下。
privatevoidbutton1_Click(objectsender,EventArgse)
{
try
{
stringstrPath="HKEY_CURRENT_CONFIG";//设默认值
stringkeyName=strPath+""+this.textBox2.Text.Trim().ToString();
objectobj=(object)this.textBox4.Text.Trim();
stringstrName=this.textBox3.Text.Trim().ToString();
Registry.SetValue(keyName,strName,obj,RegistryValueKind.String);
MessageBox.Show("写入成功");
}
catch
{
return;
}
}
参数:
keyName:以有效注册表根(如“HKEY_CURRENT_USER”)开头的键的完整注册表路径。
ValueName:名称/值对的名称。
DefaultValue:当 name 不存在时返回的值。
返回值:
如果由 keyName 指定的子项不存在,则返回空引用;否则,返回与 valueName 关联的值;或者,如果未找到 valueName,则返回 defaultValue。
例如,通过GetValueNames方法检索"HKEY_CURRENT_USERAppEventsEventLabels"子键下包含的所有子项,然后检索包含与此名称关联的值;
RegistryKeyrk=Registry.CurrentUser;
RegistryKeysys=rk.OpenSubKey(@"AppEventsEventLabels");
foreach(stringstrinsys.GetSubKeyNames())
{
RegistryKeysikey=sys.OpenSubKey(str);//打开子键
foreach(stringsVNameinsikey.GetValueNames())
{
this.listBox1.Items.Add(sikey.GetValue(sVName));
}
}
(2)SetValue方法
设置指定的注册表项的指定名称/值对。如果指定的项不存在,则创建该项。
语法:
publicstaticvoidSetValue
(
stringkeyName,
stringvalueName,
Objectvalue
)
参数:
keyName:以有效注册表根(如“HKEY_CURRENT_USER”)开头的键的完整注册表路径。
ValueName:名称/值对的名称。
Value:要存储的值。
例如,通过SetValue方法在“HKEY_CURRENT_CONFIG”键下创建一个名为mrsoft的子键,然后在mrsoft子键下添加一个名为mr的键值项同时为这个键值项添加键值(hywork);
Registry.SetValue(“HKEY_CURRENT_CONFIGmrsoft”,“mr”,“hywork”);
示例 写入注册表
向“HKEY_CURRENT_CONFIG”键下写入信息,。
首先硧定要对7个基本主键的那一个主键进行操作,这里以 “HKEY_CURRENT_CONFIG”为例,找到要操作的主键后便可以通过Registry类的SetValue方法将信息写入注册表中,程序代码如下。
privatevoidbutton1_Click(objectsender,EventArgse)
{
try
{
stringstrPath="HKEY_CURRENT_CONFIG";//设默认值
stringkeyName=strPath+""+this.textBox2.Text.Trim().ToString();
objectobj=(object)this.textBox4.Text.Trim();
stringstrName=this.textBox3.Text.Trim().ToString();
Registry.SetValue(keyName,strName,obj,RegistryValueKind.String);
MessageBox.Show("写入成功");
}
catch
{
return;
}
}