一切随风

......---谁还记得那曾经的胡同
posts - 37, comments - 46, trackbacks - 2, articles - 2
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

C#操作注册表

Posted on 2005-03-03 16:32 随风 阅读(6507) 评论(13)  编辑 收藏 网摘 所属分类: C#
以下从‘读’‘写’‘删除’‘判断’四个事例实现对注册表的简单操作
1.读取指定名称的注册表的值
private string GetRegistData(string name)
{
   string registData;
   RegistryKey hkml = Registry.LocalMachine;
   RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
   RegistryKey aimdir = software.OpenSubKey("XXX",true);
   registData = aimdir.GetValue(name).ToString();
   return registData;
}
以上是读取的注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下的XXX目录中名称为name的注册表值;

2.向注册表中写数据
private void WTRegedit(string name,string tovalue)
{
   RegistryKey hklm = Registry.LocalMachine;
   RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
   RegistryKey aimdir = software.CreateSubKey("XXX");
   aimdir.SetValue(name,tovalue);
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下新建XXX目录并在此目录下创建名称为name值为tovalue的注册表项;

3.删除注册表中指定的注册表项
private void DeleteRegist(string name)
{
   string[] aimnames;
   RegistryKey hkml = Registry.LocalMachine;
   RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
   RegistryKey aimdir = software.OpenSubKey("XXX",true);
   aimnames = aimdir.GetSubKeyNames();
   foreach(string aimKey in aimnames)
   {
    if(aimKey == name)
     aimdir.DeleteSubKeyTree(name);
   }
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中删除名称为name注册表项;

4.判断指定注册表项是否存在
private bool IsRegeditExit(string name)
{
   bool _exit = false;
   string[] subkeyNames;
   RegistryKey hkml = Registry.LocalMachine;
   RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
   RegistryKey aimdir = software.OpenSubKey("XXX",true);
   subkeyNames = aimdir.GetSubKeyNames();
   foreach(string keyName in subkeyNames)
   {
    if(keyName == name)
    {
       _exit = true;
       return _exit;
    }
   }
   return _exit;
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中判断名称为name注册表项是否存在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断;

Feedback

#1楼[楼主]   回复  引用  查看    

2005-03-03 16:38 by 随风      
命名空间:Microsoft.Win32

#2楼   回复  引用  查看    

2005-03-03 21:43 by 克仔      
能够讀与寫DWORD和BINARY值數嗎?

#3楼[楼主]   回复  引用  查看    

2005-03-04 16:22 by 随风      
DWORD和BINARY?你说的应该是C++中的数据类型吧;在C#中,这两种数据类型统一在object类中,也就是说不单独存在这两种类型的数值;注册表值的读取和写入都是object类型,可以根据需要转换成相应的数据类型。

#4楼   回复  引用  查看    

2006-05-18 16:06 by 大力      
如我要在XX项后增加一个 名称为:abc , 类型为REG_DWORD ,数值数据十进制为:384 的值怎么写

#5楼   回复  引用  查看    

2007-06-28 16:24 by scottckt      
@大力
aimdir.SetValue(abc,384,RegistryValueKind.DWord);

#6楼   回复  引用    

2007-09-09 17:24 by passer[未注册用户]
aimdir.SetValue(abc,384,RegistryValueKind.DWord);
一定会出错,SetValue只能有两个参数

#7楼[楼主]   回复  引用  查看    

2007-09-11 09:03 by 随风      
@passer

SetValue方法是有重载的。
public void SetValue(string name, object value);
public void SetValue(string name, object value, RegistryValueKind valueKind);

#8楼   回复  引用    

2007-10-31 16:09 by zhangww[未注册用户]
感谢了,

#9楼   回复  引用    

2008-02-21 02:43 by 急需的人[未注册用户]
谢谢了1

#10楼   回复  引用    

2008-06-25 15:32 by fgh[未注册用户]
good!

#11楼   回复  引用    

2008-07-28 10:06 by enixchen[未注册用户]
private string GetRegistData(string name)
{
string registData;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", true);
RegistryKey aimdir = software.OpenSubKey("DisallowRun",true);
registData = aimdir.GetValue("mms.exe").ToString();
return registData;

label6.Text = registData;
}


这样写错在哪里 ??
求助!!

#12楼   回复  引用    

2008-11-05 13:43 by wwwwwwwww[未注册用户]
return registData;

label6.Text = registData;

===================
label6.Text = registData;

return registData;

#13楼   回复  引用  查看    

2009-01-05 16:31 by 陈思涵      
判断是否在存始终返回false



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 112246




相关文章:

相关链接: