一个操作注册表的类

转载 2004年11月03日 01:46:00

早上写了一个简单的操作注册表的类。
现在帖出来让大家帮我看看,有什么问题请联系我。

using System;
using Microsoft.Win32;

namespace PowerComponent
{
 /// 操作注册表
 public class Register
 {
  /// 实例构造函数
  public Register()
  {
   // TODO: 在此处添加构造函数逻辑
  }
 

  #region 公共方法
  /// 写入注册表,如果指定项已经存在,则修改指定项的值
  /// <param name="keytype">注册表基项枚举</param>
  /// <param name="key">注册表项,不包括基项</param>
  /// <param name="name">值名称</param>
  /// <param name="values">值</param>
  /// <returns>返回布尔值,指定操作是否成功</returns>
  public bool setValue(XjxComponent.Register.keyType keytype, string key, string name, string values)
  {
   try
   {
    RegistryKey rk = (RegistryKey)getRegistryKey(keytype);
    RegistryKey rkt = rk.CreateSubKey(key);
  
    if(rkt != null)
     rkt.SetValue(name, values);
    else
    {
     throw (new Exception("要写入的项不存在"));
    }
    return true;
   }
   catch
   {
    return false;
   }
  }

 
  /// 读取注册表
  /// <param name="keytype">注册表基项枚举</param>
  /// <param name="key">注册表项,不包括基项</param>
  /// <param name="name">值名称</param>
  /// <returns>返回字符串</returns>
  public string getValue(XjxComponent.Register.keyType keytype, string key, string name)
  {
   try
   {
    RegistryKey rk = (RegistryKey)getRegistryKey(keytype);
   RegistryKey rkt = rk.OpenSubKey(key);

    if(rkt != null)
     return rkt.GetValue(name).ToString();
    else
     throw(new Exception("无法找到指定项"));
   }
   catch(Exception ex)
   {
    return ex.Message;
   }

  }


  /// 删除注册表中的值
  /// <param name="keytype">注册表基项枚举</param>
  /// <param name="key">注册表项名称,不包括基项</param>
  /// <param name="name">值名称</param>
  /// <returns>返回布尔值,指定操作是否成功</returns>
  public bool deleteValue(XjxComponent.Register.keyType keytype, string key, string name)
  {
   try
   {
    RegistryKey rk = (RegistryKey)getRegistryKey(keytype);    
    RegistryKey rkt = rk.OpenSubKey(key,true);

    if( rkt != null)
     rkt.DeleteValue(name,true);
    else
     throw(new Exception("无法找到指定项"));
    return true;
 }
   catch
   {
    return false;
   }
  }


  /// 删除注册表中的指定项
    /// <param name="keytype">注册表基项枚举</param>
  /// <param name="key">注册表中的项,不包括基项</param>
  /// <returns>返回布尔值,指定操作是否成功</returns>
  public bool deleteSubKey(XjxComponent.Register.keyType keytype, string key)
  {
   try
   {
    RegistryKey rk = (RegistryKey)getRegistryKey(keytype);
    rk.DeleteSubKeyTree(key);
    return true;
   }
   catch
   {
    return false;
   }
  }


  /// 判断指定项是否存在
  /// <param name="keytype">基项枚举</param>
  /// <param name="key">指定项字符串</param>
  /// <returns>返回布尔值,说明指定项是否存在</returns>
  public bool isExist(XjxComponent.Register.keyType keytype, string key)
  {
   RegistryKey rk = (RegistryKey)getRegistryKey(keytype);

   if(rk.OpenSubKey(key) == null)
    return false;
   else
    return true;
  }


  /// 检索指定项关联的所有值
  /// <param name="keytype">基项枚举</param>
  /// <param name="key">指定项字符串</param>
  /// <returns>返回指定项关联的所有值的字符串数组</returns>
  public string[] getValues(XjxComponent.Register.keyType keytype, string key)
  {
   RegistryKey rk = (RegistryKey)getRegistryKey(keytype);
   RegistryKey rkt = rk.OpenSubKey(key);

   if(rkt != null)
   {
       string[] names = rkt.GetValueNames();
    if(names.Length == 0)
     return names;
    else
    {
     string[] values = new string[names.Length];
     int i = 0;
     foreach(string name in names)
     {
      values[i] = rkt.GetValue(name).ToString();
      i++;
     }
     return values;
    }
   }
   else
   {
    throw (new Exception("指定项不存在"));
   }
     }

  #endregion

  #region 私有方法

  /// 返回RegistryKey对象
  /// <param name="keytype">注册表基项枚举</param>
  /// <returns></returns>
  private object getRegistryKey(XjxComponent.Register.keyType keytype)
  {
   RegistryKey rk = null;
  
   switch(keytype)
   {
    case keyType.HKEY_CLASS_ROOT:
     rk = Registry.ClassesRoot;
     break;
    case keyType.HKEY_CURRENT_USER:
     rk = Registry.CurrentUser;
     break;
    case keyType.HKEY_LOCAL_MACHINE:
     rk = Registry.LocalMachine;
     break;
    case keyType.HKEY_USERS:
     rk = Registry.Users;
     break;
    case keyType.HKEY_CURRENT_CONFIG:
     rk = Registry.CurrentConfig;
     break;
   }
   return rk;
  }

  #endregion 

  #region 枚举
  /// 注册表基项枚举
  public enum keyType:int
  {
   /// 注册表基项 HKEY_CLASSES_ROOT
        HKEY_CLASS_ROOT = 0,

   /// 注册表基项 HKEY_CURRENT_USER
         HKEY_CURRENT_USER = 1,

   /// 注册表基项 HKEY_LOCAL_MACHINE
         HKEY_LOCAL_MACHINE = 2,

   /// 注册表基项 HKEY_USERS
           HKEY_USERS = 3,
  
/// 注册表基项 HKEY_CURRENT_CONFIG
           HKEY_CURRENT_CONFIG = 4
  }
  #endregion

 

C# 注册表操作类(完整版)

C# 注册表操作类
  • lj22377
  • lj22377
  • 2014年07月31日 17:12
  • 602

C#注册表读写完整操作类

1.注册表基项静态域 C#代码   ///        /// 注册表基项静态域       ///1.Registry.ClassesRoot 对应于HKEY_CLAS...
  • lingfengstar1
  • lingfengstar1
  • 2017年06月01日 18:57
  • 593

C++对注册表常见操作的封装实现

1、头文件(声明)/*********************************************************************  文件名:RegOperator.h* ...
  • eaglewood2005
  • eaglewood2005
  • 2009年04月15日 16:47
  • 4138

C++使用CRegKey类对注册表操作

CRegKey myKey; if(myKey.Open(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Int...
  • bojie5744
  • bojie5744
  • 2014年09月29日 12:33
  • 1555

VC读写注册表类及用法

编程过程中经常会需要对注册表进行读写操作,这个类可以让你很方便的对注册表进行编辑: #ifndef __REGISTRY_H #define __REGISTRY_H class CRegistry...
  • shishuiliu00
  • shishuiliu00
  • 2016年05月04日 09:40
  • 420

一个操作注册表的类

Windows 操作系统的注册表包含了很多有关计算机运行的配置方式,打开注册表我们可以看到注册表是按类似于目录的树结构组织的,其中第二级目录包含了五个预定义主键分别是:HKEY_CLASSES_ROO...
  • kgdlin
  • kgdlin
  • 2008年01月17日 15:11
  • 2900

Windows注册表操作

注册表是Windows操作系统中一个重要的数据库,其中保存着操作系统和各种软件的重要信息。注册表是如此的重要,所以也是病毒和反病毒软件的兵家必争之地。 注册表是Windows系统管理和维护的配置较为...
  • wzxq123
  • wzxq123
  • 2016年07月09日 11:42
  • 2211

一个操作注册表的类

using System;using Microsoft.Win32;namespace PowerComponent{ ///  /// 操作注册表 ///  public class Regist...
  • fkphp
  • fkphp
  • 2004年11月08日 14:10
  • 889

vb.net操作注册表(增加 修改 删除 查询)

vb.net操作注册表(增加 修改 删除 查询)增加 Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMa...
  • ITshu
  • ITshu
  • 2009年05月25日 17:54
  • 3280

一个好用的 VB 注册表操作类模块

具体使用一看就明白了,来自 CSDNOption ExplicitPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"...
  • snlmgytO
  • snlmgytO
  • 2005年09月25日 20:06
  • 1622
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 一个操作注册表的类
举报原因:
原因补充:

(最多只允许输入30个字)