一個操作註冊表的類

來源:互聯網
上載者:User

早上寫了一個簡單的操作註冊表的類。
現在帖出來讓大家幫我看看,有什麼問題請聯絡我。

using System;
using Microsoft.Win32;

namespace PowerComponent
{
 /// <summary>
 /// 操作註冊表
 /// </summary>
 public class Register
 {

  /// <summary>
  /// 執行個體建構函式
  /// </summary>
  public Register()
  {
   //
   // TODO: 在此處添加建構函式邏輯
   //
  }
  

  #region 公用方法

  /// <summary>
  /// 寫入註冊表,如果指定項已經存在,則修改指定項的值
  /// </summary>
  /// <param name="keytype">註冊表基項枚舉</param>
  /// <param name="key">登錄機碼,不包括基項</param>
  /// <param name="name">值名稱</param>
  /// <param name="values">值</param>
  /// <returns>返回布爾值,指定操作是否成功</returns>
  public bool setValue(PowerComponent.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;
   }

  }

  
  /// <summary>
  /// 讀取註冊表
  /// </summary>
  /// <param name="keytype">註冊表基項枚舉</param>
  /// <param name="key">登錄機碼,不包括基項</param>
  /// <param name="name">值名稱</param>
  /// <returns>返回字串</returns>
  public string getValue(PowerComponent.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;
   }

  }

  /// <summary>
  /// 刪除註冊表中的值
  /// </summary>
  /// <param name="keytype">註冊表基項枚舉</param>
  /// <param name="key">登錄機碼名稱,不包括基項</param>
  /// <param name="name">值名稱</param>
  /// <returns>返回布爾值,指定操作是否成功</returns>
  public bool deleteValue(PowerComponent.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;
   }
  }

  /// <summary>
  /// 刪除註冊表中的指定項
  /// </summary>
  /// <param name="keytype">註冊表基項枚舉</param>
  /// <param name="key">註冊表中的項,不包括基項</param>
  /// <returns>返回布爾值,指定操作是否成功</returns>
  public bool deleteSubKey(PowerComponent.Register.keyType keytype, string key)
  {
   try
   {
    RegistryKey rk = (RegistryKey)getRegistryKey(keytype);

    rk.DeleteSubKeyTree(key);

    return true;

   }
   catch
   {
    return false;
   }
  }

  /// <summary>
  /// 判斷指定項是否存在
  /// </summary>
  /// <param name="keytype">基項枚舉</param>
  /// <param name="key">指定項字串</param>
  /// <returns>返回布爾值,說明指定項是否存在</returns>
  public bool isExist(PowerComponent.Register.keyType keytype, string key)
  {
   RegistryKey rk = (RegistryKey)getRegistryKey(keytype);

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

  /// <summary>
  /// 檢索指定項關聯的所有值
  /// </summary>
  /// <param name="keytype">基項枚舉</param>
  /// <param name="key">指定項字串</param>
  /// <returns>返回指定項關聯的所有值的字串數組</returns>
  public string[] getValues(PowerComponent.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 私人方法

  /// <summary>
  /// 返回RegistryKey對象
  /// </summary>
  /// <param name="keytype">註冊表基項枚舉</param>
  /// <returns></returns>
  private object getRegistryKey(PowerComponent.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 枚舉
  /// <summary>
  /// 註冊表基項枚舉
  /// </summary>
  public enum keyType:int
  {
   /// <summary>
   /// 註冊表基項 HKEY_CLASSES_ROOT
   /// </summary>
   HKEY_CLASS_ROOT,
   /// <summary>
   /// 註冊表基項 HKEY_CURRENT_USER
   /// </summary>
   HKEY_CURRENT_USER ,
   /// <summary>
   /// 註冊表基項 HKEY_LOCAL_MACHINE
   /// </summary>
   HKEY_LOCAL_MACHINE ,
   /// <summary>
   /// 註冊表基項 HKEY_USERS
   /// </summary>
   HKEY_USERS ,
   /// <summary>
   /// 註冊表基項 HKEY_CURRENT_CONFIG
   /// </summary>
   HKEY_CURRENT_CONFIG 
  }
  #endregion

 }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.