C#教程:向注册表写入信息
向注册表写入信息
为了使编程人员能够快速地向注册表写入信息,Registry类将注册表中7大主键封装为公有的静态域,而这些静态域分别代表着注册表中的7个基本的主键,这样在向注册表中写入信息时就可以通过Registry类的7个公有的静态域与注册表——映射。具体描述如表1所示。
表1 Registry类封装的7个公有的静态域列表
通过Registry类中的GetValue方法、SetValue方法可以实现向注册表中写入信息。
(1)GetValue 方法。检索与指定的注册表项中的指定名称关联的值。如果在指定的项中未找到该名称,则返回用户提供的默认值;或者,如果指定的项不存在,则返回空引用。
语法:
public static Object GetValue
(
string keyName,
string valueName,
Object defaultValue
)
参数说明如下。
keyName:以有效注册表根(如“HKEY_CURRENT_USER”)开头的键的完整注册表路径。
ValueName:名称/值对的名称。
DefaultValue:当 name 不存在时,返回的值。
返回值:如果由 keyName 指定的子项不存在,则返回空引用;否则,返回与 valueName 关联的值;或者,如果未找到 valueName,则返回 defaultValue。
例如,通过GetValueNames方法检索“HKEY_CURRENT_USERAppEventsEventLabels”子键下包含的所有子项,然后检索包含与此名称关联的值。代码如下:
RegistryKey rk = Registry.CurrentUser;
RegistryKey sys = rk.OpenSubKey(@"AppEventsEventLabels");
foreach(string str in sys.GetSubKeyNames())
{
RegistryKey sikey = sys.OpenSubKey(str);//打开子键
foreach (string sVName in sikey.GetValueNames())
{
this.listBox1.Items.Add(sikey.GetValue(sVName));
}
}
(2)SetValue方法。设置指定的注册表项的指定名称/值对。如果指定的项不存在,则创建该项。
语法:
public static void SetValue
(
string keyName,
string valueName,
Object value
)
参数说明如下。
keyName:以有效注册表根(如“HKEY_CURRENT_USER”)开头的键的完整注册表路径。
ValueName:名称/值对的名称。
Value:要存储的值。
例如,通过SetValue方法在“HKEY_CURRENT_CONFIG”键下创建一个名为mrsoft的子键,然后在mrsoft子键下添加一个名为mr的键值项同时为这个键值项添加键值(hywork),代码如下:
Registry.SetValue("HKEY_CURRENT_CONFIGmrsoft", "mr", "hywork");
示例
写入注册表
向“HKEY_CURRENT_CONFIG”键下写入信息,程序运行效果如图1所示。
图1 写入注册表
首先确定要对7个基本主键的哪一个主键进行操作,这里以 “HKEY_CURRENT_CONFIG”为例,找到要操作的主键后便可以通过Registry类的SetValue方法将信息写入注册表中,程序代码如下。
private void button1_Click(object sender, EventArgs e)
{
try
{
string strPath = "HKEY_CURRENT_CONFIG";//设默认值
string keyName = strPath + "" + this.textBox2.Text.Trim().ToString();
object obj = (object)this.textBox4.Text.Trim();
string strName = this.textBox3.Text.Trim().ToString();
Registry.SetValue(keyName, strName, obj, RegistryValueKind.String);