C#操作註冊表

一.註冊表巢

     在註冊表中,最上面的節點是註冊表巢(registry hive)。

     HKEY_CLASSES_ROOT(HKCR)    包含系統文件類型的細節,以及應用程序可以打開的文件類型,它還包含所有COM組件的註冊信息。

     HKEY_CURRENT_USER(HKCU)    包含用戶目前登陸的機器的用戶配置,包括桌面設置、環境變量、網絡和打印機連接和其他定義用戶操作環境的變量。

     HKEY_LOCAL_MACHINE(HKLM)    是一個很大的巢,其中包含所有安裝到機器上的軟件和硬件的信息。

     HKEY_USERS(HKUSR)                包含所有用戶的用戶配置。

     HKEY_CURRENT_CONFIG(HKCF)  包含機器上硬件的信息。

二.註冊表類及常用屬性和函數

using Microsoft.Win32;
這個命名空間包含了註冊表相關的類。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主鍵















RegistryKey類封裝了對註冊表的基本操作。包括讀、寫、刪等操作的常用函數: 
Name鍵的名稱(只讀)
SubKeyCount鍵的子鍵個數
ValueCount鍵包含的值的個數
Close()關閉鍵
CreateSubKey()創建給定名稱的子鍵
DeleteSubKey()刪除指定的子鍵
DeleteSubKeyTree()遞歸刪除子鍵及其所有的子鍵
DeleteValue()從鍵中刪除一個指定的值
GetAccessControl()返回指定註冊表鍵的訪問控制表
GetSubKeyNames()返回包含子鍵名稱的字符串數組
GetValue()返回指定的值
GetValueKind()返回指定的值,檢索其註冊表數據類型
GetValueNames()返回一個包含所有鍵值名稱的字符串數組
OpenSubKey()返回表示給定子鍵的RegistryKey實例引用
SetAccessControl()把訪問控制表(ACL)應用於指定的註冊表鍵
SetValue()設置指定的值
                




















三 註冊表項的創建、打開、刪除
   1,創建
 //使用CreateSubKey()在SOFTWARE下創建子項test
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.CreateSubKey(@"SOFTWARE\test");
hklm.Close();
hkSoftWare.Close();
 

       2,打開

//使用OpenSubKey()打開項,獲得RegistryKey對象,當路徑不存在時,爲Null。第二個參數爲true,表示可寫,可讀,可刪;省略時只能讀。
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test",true);
hklm.Close();
hkSoftWare.Close();

 

 

 

      3,刪除

//主要用到了DeleteSubKey(),刪除test項
RegistryKey hklm = Registry.LocalMachine;
hklm.DeleteSubKey(@"SOFTWARE\test", true);  //爲true時,刪除的註冊表不存在時拋出異常;當爲false時不拋出異常。
hklm.Close();

 

四、註冊表鍵值的創建、打開和刪除

      1,創建

//主要用到了SetValue(),表示在test下創建名稱爲Name,值爲RegistryTest的鍵值。第三個參數表示鍵值類型,省略時,默認爲字符串
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test",true);
hkSoftWare.SetValue("Name", "RegistryTest", RegistryValueKind.String);
hklm.Close();
hkSoftWare.Close();

 

     2,打開

//主要用到了GetValue(),獲得名稱爲"Name"的鍵值
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test", true);
string sValue = hkSoftWare.GetValue("Name").ToString();
hklm.Close();
hkSoftWare.Close();

 

     3,刪除

//主要用到了DeleteValue(),表示刪除名稱爲"Name"的鍵值,第二個參數表示是否拋出異常
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test", true);
hkSoftWare.DeleteValue("Name", true);
hklm.Close();
hkSoftWare.Close();

 

五、判斷註冊表項、註冊表鍵值是否存在

複製代碼
        //判斷註冊表項是否存在
        private bool IsRegistryKeyExist(string sKeyName)
        {
            string[] sKeyNameColl;
            RegistryKey hklm = Registry.LocalMachine;
            RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE");
            sKeyNameColl = hkSoftWare.GetSubKeyNames(); //獲取SOFTWARE下所有的子項
            foreach (string sName in sKeyNameColl)
            {
                if (sName == sKeyName)
                {
                    hklm.Close();
                    hkSoftWare.Close();
                    return true;
                }
            }
            hklm.Close();
            hkSoftWare.Close();
            return false;
        }


        //判斷鍵值是否存在
        private bool IsRegistryValueNameExist(string sValueName)
        {
            string[] sValueNameColl;
            RegistryKey hklm = Registry.LocalMachine;
            RegistryKey hkTest = hklm.OpenSubKey(@"SOFTWARE\test");
            sValueNameColl = hkTest.GetValueNames(); //獲取test下所有鍵值的名稱
            foreach (string sName in sValueNameColl)
            {
                if (sName == sValueName)
                {
                    hklm.Close();
                    hkTest.Close();
                    return true;
                }
            }
            hklm.Close();
            hkTest.Close();
            return false;
        }
複製代碼

 

六、程序自啓動程序

複製代碼
                //開啓程序自啓動
                string path = Application.ExecutablePath;
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
                rk2.SetValue("JcShutdown", path);
                rk2.Close();
                rk.Close();



                //關閉程序自啓動
                string path = Application.ExecutablePath;
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
                rk2.DeleteValue("JcShutdown", false);
                rk2.Close();
                rk.Close();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章