//用.NET下托管語言C#操作注冊表,主要內容包括:注冊表項的創建,打開與刪除、鍵值的創建(設置值、修改),讀取和刪除、判斷注冊表項是否存在、判斷鍵值是否存在.//準備工作://1:要操作注冊表,我們必須要引入必要的命名空間:using Microsoft.Win32;在這個命名空間里面包含了許多注冊表相關的類,足夠我們使用了.//2:命名空間里面提供了一個類:RegistryKey 利用它我們可以定位到注冊表最開頭的分支:ClassesRoot,CurrentUser,Users,LocalMachine,CurrentConfig(分別代表HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,HKEY_CURRENT_CONFIG根鍵)如:RegistryKey key = Registry.LocalMachine;//3:在操作的過程中涉及到子分支,要用全路徑進行open深入,單個子鍵名會報錯!//4:最后要調用RegistryKey對象的Close()關閉對注冊表的修改。//5:以下我們的例子都是在LocalMachine分支下,請注意.//一:注冊表項的創建,打開與刪除//1:創建://創建注冊表項主要用到RegistryKey 的CreateSubKey()方法.如: RegistryKey key = Registry.LocalMachine; RegistryKey softwareSubKey = key.CreateSubKey("SOFTWARE//MYTEST");//在HKEY_LOCAL_MACHINE/SOFTWARE下新建名為MYTEST的注冊表項.如果已經存在則不影響!,其他路徑下(出SOFTWARE)建立可能沒有權限!//2:打開://打開注冊表項主要用到RegistryKey 的OpenSubKey()方法.如://RegistryKey key = Registry.LocalMachine; RegistryKey subkeyMYTEST = key.OpenSubKey("SOFTWARE//MYTEST", true);//注意該方法后面還可以有一個布爾型的參數,true表示可以寫入.//注意,如果該注冊表項不存在,這調用這個方法會拋出異常//3:刪除://刪除注冊表項主要用到RegistryKey 的DeleteSubKey()方法.如://RegistryKey key = Registry.LocalMachine;//key.DeleteSubKey("SOFTWARE//MYTEST", true); //該方法無返回值,直接調用即可//key.Close();//注意,如果該注冊表項不存在,這調用這個方法會拋出異常//二:鍵值的創建(設置值、修改),讀取和刪除//1:創建(設置值、修改)://對鍵值的創建修改等操作主要用到RegistryKey 的SetValue()方法//RegistryKey key = Registry.LocalMachine; RegistryKey software = key.OpenSubKey("SOFTWARE//MYTEST", true); //該項("SOFTWARE//MYTEST")必須已存在 software.SetValue("test", "園");//在HKEY_LOCAL_MACHINE/SOFTWARE/MYTEST"下創建一個名為“test”,值為“園”的鍵值.如果該鍵值原本已經存在,則會修改替換原來的鍵值,如果不存在則是創建該鍵值.//注意:SetValue()還有第三個參數,主要是用于設置鍵值的類型,如:字符串,二進制,DWord等等,默認是字符串.如: software.SetValue("test2", 0, RegistryValueKind.DWord);// 二進制信息 key.Close();//2:讀取: string info; RegistryKey KeyLocalMachine; KeyLocalMachine = Registry.LocalMachine; RegistryKey myreg = KeyLocalMachine.OpenSubKey("SOFTWARE//MYTEST");//或者使用myreg = KeyLocalMachine.OpenSubKey("SOFTWARE//MYTEST", true); info = myreg.GetValue("test").ToString(); myreg.Close();//info結果為:園//3:刪除: RegistryKey delKey = Registry.LocalMachine.OpenSubKey("SOFTWARE//MYTEST", true); delKey.DeleteValue("test"); delKey.Close();//細心的讀者可能發現了第二個例子中OpenSubKey()方法參數與其他例子的不同.//如果你要修改鍵值,包括創建、設置、刪除鍵值等都要在方法后面加個布爾參數,設置為true,表示可寫可改;如果僅僅只是讀取鍵值可以不加,此時可寫關閉,你不能再往里寫值(當然,你要加也可以true)!//還有讀者提到讀寫默認鍵值的問題,主要在設置、讀取的方法中將鍵名置空則就是對默認鍵值的操作.//如: software.SetValue("", "園");//在HKEY_LOCAL_MACHINE/SOFTWARE/MYTEST修改默認鍵值的值為“園”.讀取類似!//另外,默認的鍵值是不能刪除的,所以不要用DeleteValue()方法去刪除,會拋出異常的!//三:判斷注冊表項是否存在//PRivate bool IsRegeditItemExist()//{//string[] subkeyNames;//RegistryKey hkLocalMachine = Registry.LocalMachine;//RegistryKey softwareItem = hkLocalMachine.OpenSubKey("SOFTWARE");//或RegistryKey softwareItem = hkLocalMachine.OpenSubKey("SOFTWARE", true);//subkeyNames = softwareItem.GetSubKeyNames();//取得該項下所有子項的名稱的序列,并傳遞給預定的數組中//foreach (string keyName in subkeyNames) //遍歷整個數組//{// if (keyName == "TEST") //判斷子項的名稱// {// hkLocalMachine.Close();// //return true;// }//}//hkLocalMachine.Close();//return false;//}//四:判斷鍵值是否存在//private bool IsRegeditKeyExit()//{//string[] subkeyValueNames;//RegistryKey hkLocalMachine = Registry.LocalMachine;//RegistryKey keyValueName = hkLocalMachine.OpenSubKey("SOFTWARE//MYTEST");//或者RegistryKey keyValueName = hkml.OpenSubKey("SOFTWARE//MYTEST", true);//subkeyValueNames = keyValueName.GetValueNames();//取得該項下所有鍵值的名稱的序列,并傳遞給預定的數組中//foreach (string kValueName in subkeyValueNames)//{// if (kValueName == "test") //判斷鍵值的名稱// {// hkLocalMachine.Close();// //return true;// }//}//hkLocalMachine.Close();//return false;//}//注:注冊表的數據結構//注冊表由鍵(或稱“項”)、子鍵(子項)和值項構成.//一個鍵就是分支中的一個文件夾,而子鍵就是這個文件夾中的子文件夾,子鍵同樣是一個鍵.//一個值項則是一個鍵的當前定義,由名稱、數據類型以及分配的值組成.//一個鍵可以有一個或多個值,每個值的名稱各不相同,如果一個值的名稱為空,則該值為該鍵的默認值.//數據類型//注冊表的數據類型主要有以下四種://顯示類型(在編輯器中) 數據類型 說明//REG_SZ 字符串 文本字符串//REG_MULTI_SZ 多字符串 含有多個文本值的字符串//REG_BINARY 二進制數 二進制值,以十六進制顯示.//REG_DWORD 雙字 一個32位的二進制值,顯示為8位的十六進制值.
新聞熱點
疑難解答