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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM