昨天写了第一篇文章之后,感觉与大家分享,自己学到东西是一种快乐!今天光棍节,属于所有光棍的节日,也属于那些告别光棍的节日。我是属于前一种,没事可做。就继续写点东西吧!
我们在做软件中会经常要用到与注册表的操作,所以今天就和大家一起来学习一下用C#怎么来操作注册表吧!(演示操作启动项)
对注册表的操作主要有:写入键值、删除键值、读取键值三种。(修改与写入几乎一样) 如有不对的地方还请大家指点!共同提高
首先我们来熟悉一下C#中操作注册表的类和方法。在C#中提供了Registry类、RegistryKey类来实现对注册表的操作。其中Registry类封装了注册表的七个基本主健:
Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键
Registry.CurrentUser 对应于HKEY_CURRENT_USER主键
Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键
Registry.User 对应于 HKEY_USER主键
Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键
Registry.DynDa 对应于HKEY_DYN_DATA主键
Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键
Registry类和RegistryKey类是属于Microsoft.Win32命名空间的。所以我们必须先引用该命名空间。
代码如下:
引用命名空间
using Microsoft.Win32;
程序开始我们先定义一些变量吧!
变量定义
private RegistryKey key;
private RegistryKey subkey;
private RegistryKey mainkey;
private string fullDir = "software\\microsoft\\windows\\currentVersion\\"; ///完整目录
private string dir = "run"; ///注册表目录
private string filePath = "cmd.exe"; ///此处注意是系统程序(如:xp下的C:\windows\system32)的话,直接写文件名即可,否则要完整的路径
首先我们对key、subkey进行初始化;
初始化key、subkey
///初始化key,操作HKEY_LOCAL_MACHINE主键
key = Registry.LocalMachine;
///初始化subkey,操作HKEY_LOCAL_MACHINE\software\microsoft\windows\currentVersion\子项
subkey = key.OpenSubKey(fullDir, true);
我们先来看写入键值吧
写入键值
/// <summary>
/// 写入键值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnWrite_Click(object sender, EventArgs e)
{
///目录不存在则创建该目录
if (!RegeditDirIsExist(dir))
{
subkey.CreateSubKey(dir);
}
///以可写的方式打开目录
mainkey = key.OpenSubKey(fullDir + dir, true);
mainkey.SetValue(regName, filePath);
MessageBox.Show("键值写入成功");
}
上面代码中RegeditDirIsExist()方法是用于检查目录是否存在的,代码如下
判断目录是否存在
/// <summary>
/// 判断目录是否存在
/// </summary>
/// <param name="dirName"></param>
/// <returns></returns>
private bool RegeditDirIsExist(string dirName)
{
///遍历所有子项的名称,返回字符串数组
foreach (string keys in subkey.GetSubKeyNames())
{
if (keys.ToLower() == dirName.ToLower())
{
return true;
}
}
return false;
}
写入键值主要是调用SetValue方法设置值,这里是有两个参数,第一个参数是要写入的键的名称,第二个参数是要写入的值。
然后我们来看读取键值,在读取键值之前我们必须先判断键值是否存在,否则会出错。方法与判断目录一样
判断键值是否存在
/// <summary>
/// 判断键值是否存在
/// </summary>
/// <param name="regKey"></param>
/// <returns></returns>
private bool RegeditKeyIsExist(string regKey)
{
foreach (string str in mainkey.GetValueNames())
{
if (str.ToLower() == regKey.ToLower())
{
return true;
}
}
return false;
}
读取键值操作是通过调用GetValue()方法,这里有一个参数,就是要读取的键值的名称。
读取键值
/// <summary>
/// 读取键值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRead_Click(object sender, EventArgs e)
{
///以只读方式打开目录
mainkey = key.OpenSubKey(fullDir + dir, false);
if (!RegeditKeyIsExist(regName))
{
MessageBox.Show("键值不存在");
return;
}
string keyvalue = mainkey.GetValue(regName).ToString();
MessageBox.Show(keyvalue);
}
最后我们来看删除键值操作
删除键值
/// <summary>
/// 删除键值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDelete_Click(object sender, EventArgs e)
{
mainkey = key.OpenSubKey(fullDir + dir, true);
if (!RegeditKeyIsExist(regName))
{
MessageBox.Show("键值不存在");
return;
}
mainkey.DeleteValue(regName);
MessageBox.Show("键值删除成功");
}
主要用到的方式是DeleteValue(),参数是要删除的键值名称。
应该比较简单吧!希望大家有空能多多指点!可以多交流!