windows 作業系統的登錄檔包含了很多有關計算機執行的配置方式,開啟登錄檔我們可以看到登錄檔是按類似於目錄的樹結構組織的,其中第二級目錄包含了五個預定義主鍵分別是:hkey_classes_root,hkey_current_user,hkey_local_machine,hkey_users,hkey_current_config。
下面我們來分別解釋這5個類的作用
hkey_classes_root該主鍵包含了檔案的副檔名和應用程式的關聯資訊以及window shell和ole用於儲存登錄檔的資訊。該主鍵下的子鍵決定了在windows中如何顯示該類檔案以及他們的圖示,該主鍵是從hkey_lccal_machine/software/classes對映過來的。
hkey_current_user該主鍵包含了如使用者視窗資訊,桌面設定等當前使用者的資訊。
hkey_local_machine主鍵包含了計算機軟體和硬體的安裝和配置資訊,該資訊可供所有使用者使用
hkey_users該主鍵記錄了當前使用者的設定資訊,每次使用者登入系統時,就會在該主鍵下生成乙個與使用者登入名一樣的子鍵,該子鍵儲存了當前使用者的桌面設定、背景位圖、快捷鍵,字型等資訊。一般應用程式不直接訪問改主鍵,而是通過主鍵hkey_current_user進行訪問。
hkey_current_config該主鍵儲存了計算機當前硬體的配置資訊,這些配置可以根據當前所連線的網路型別或硬體驅動軟體安裝的改變而改變。
c#也支援對登錄檔的編輯,.net框架在microsoft.win32名字空間中提供了兩個類來操作登錄檔:registry和registrykey。這兩個類都是密封類不允許被繼承。下面我們分別來介紹這兩個類。
registry類提供了7個公共的靜態域,分別代表7個基本主鍵(其中兩個在xp系統中沒有,在這就不介紹了)分別是:registry.classesroot,registry.currentuser,registry.localmachine,registry.users,registry.currentconfig。它們分別對應哪幾個鍵我想各位一看就會知道吧。
registrykey類中提供了對登錄檔操作的方法。要注意的是操作登錄檔必須符合系統許可權,否則將會丟擲錯誤。
下面我們就來幾個操作登錄檔常用的幾個方法
建立子鍵的方法原型為:
public registrykey createsubkey(string sunbkey);
引數sunbkey表示要建立的子鍵的名稱或路徑名。建立成功返回被建立的子鍵,否則返回null。
開啟子鍵的方法原型為:
public registrykey opensubkey(string name);
public registrykey opensubkey(string name,bool writable);
引數name表示要開啟的子鍵名或其路徑名,引數writable表示被開啟的子鍵是否允許被修改,第乙個方法開啟的子鍵是唯讀的。microsoft.win32類還為我們提供了另乙個方法,用於開啟遠端計算機上的登錄檔,方法原型為:
public static registrykey openremotebasekey(registryhive hkey,string machinename);
刪除子鍵的方法原型為:
public void deletekey(string subkey);
該方法用於刪除指定的主鍵。如果要刪除的子鍵還包含主鍵則刪除失敗,並返回乙個異常,如果要徹底刪除該子鍵極其目錄下的子鍵可以用方法deletesubkeytree,該方法原型如下:
public void deletekeytree(string subkey);
讀取鍵值的方法原型如下:
public object getvalue(string name);
public object getvalue(string name,object defaultvalue);
引數name表示鍵的名稱,返回型別是乙個object型別,如果指定的鍵不存在則返回null。如果失敗又不希望返回的值是null則可以指定引數defaultvalue,指定了引數則在讀取失敗的情況下返回該引數指定的值。
設定鍵值的方法原型如下:
public object setvalue(string name,object value);
乙個操作登錄檔的類
namespace powercomponent
#region 公共方法
///
/// 寫入登錄檔,如果指定項已經存在,則修改指定項的值
///
/// 登錄檔基項列舉
/// 登錄檔項,不包括基項
/// 值名稱
/// 值
/// 返回布林值,指定操作是否成功
public bool setvalue(powercomponent.register.keytype keytype, string key, string name, string values)
return true;
}catch }
///
/// 讀取登錄檔
///
/// 登錄檔基項列舉
/// 登錄檔項,不包括基項
/// 值名稱
/// 返回字串
public string getvalue(powercomponent.register.keytype keytype, string key, string name)
catch(exception ex) }
///
/// 刪除登錄檔中的值
///
/// 登錄檔基項列舉
/// 登錄檔項名稱,不包括基項
/// 值名稱
/// 返回布林值,指定操作是否成功
public bool deletevalue(powercomponent.register.keytype keytype, string key, string name)
catch}
///
/// 刪除登錄檔中的指定項
///
/// 登錄檔基項列舉
/// 登錄檔中的項,不包括基項
/// 返回布林值,指定操作是否成功
public bool deletesubkey(powercomponent.register.keytype keytype, string key)
catch}
///
/// 判斷指定項是否存在
///
/// 基項列舉
/// 指定項字串
/// 返回布林值,說明指定項是否存在
public bool i***ist(powercomponent.register.keytype keytype, string key)
///
/// 檢索指定項關聯的所有值
///
/// 基項列舉
/// 指定項字串
/// 返回指定項關聯的所有值的字串陣列
public string getvalues(powercomponent.register.keytype keytype, string key)
return values; }
}else}
#endregion
#region 私有方法
///
/// 返回registrykey物件
///
/// 登錄檔基項列舉
///
private object getregistrykey(powercomponent.register.keytype keytype)
return rk;}
#endregion
#region 列舉
///
/// 登錄檔基項列舉
///
public enum keytype:int
#endregion }
}以下從『讀』『寫』『刪除』『判斷』四個事例實現對登錄檔的簡單操作
1.讀取指定名稱的登錄檔的值
程式**
private string getregistdata(string name)
以上是讀取的登錄檔中hkey_local_machine/software目錄下的***目錄中名稱為name的登錄檔值;
2.向登錄檔中寫資料
程式**
private void wtregedit(string name,string tovalue)
以上是在登錄檔中hkey_local_machine/software目錄下新建***目錄並在此目錄下建立名稱為name值為tovalue的登錄檔項;
3.刪除登錄檔中指定的登錄檔項
程式**
private void deleteregist(string name) }
以上是在登錄檔中hkey_local_machine/software目錄下***目錄中刪除名稱為name登錄檔項;
4.判斷指定登錄檔項是否存在
程式**
private bool isregeditexit(string name) }
return _exit;
}
乙個操作登錄檔的類
namespace power ponent region 公共方法 寫入登錄檔,如果指定項已經存在,則修改指定項的值 登錄檔基項列舉 登錄檔項,不包括基項 值名稱 值 返回布林值,指定操作是否成功 public bool setvalue power ponent.register.keytype...
封裝了乙個簡單的登錄檔操作類
if defined afx registry h e0610a5d 7166 4d02 9d7e 11af7cf8e229 included define afx registry h e0610a5d 7166 4d02 9d7e 11af7cf8e229 included 建立新鍵的返回值 i...
登錄檔操作類
using system using system.collections.generic using system.text using microsoft.win32 操作登錄檔的命名空間 namespace winxpreg 讀取路徑為keypath,鍵名為keyname的登錄檔鍵值,預設返回...