[b] 由於visual c#本身沒有類庫,是通過.net framework sdk(軟體開發包)定義的一些類來實現對登錄檔的操作的。這就是命名空間microsoft.win32中封裝的二個類:registry類和registrykey類。在registrykey類中定義了二個方法用來建立登錄檔中的主鍵、子鍵和鍵值。它們是createsubvalue ( )方法和setvalue ( )方法。那麼如何用visual c#來修改註冊資訊?在本文中,我們只介紹修改登錄檔中的鍵值的方法。而對於主鍵和子鍵,由於.net framework sdk中還沒有定義這方面的方法,所以還無法完成安全的修改登錄檔中的資訊。
一.visual c#建立和修改註冊資訊要呼叫的兩個方法
(1)createsubkey ( string key )方法:此方法是建立以後面的字串為名稱的子鍵。當然這種方法不僅能夠建立子鍵,在下面介紹的程式中,也通過此種方法來建立乙個主鍵。
(2)setvalue ( string name , string keyvalue )方法:此方法的作用有二,一是可以用來重新命名鍵值的數值,一是可以用來建立新的鍵值。具體情況為:當開啟的子鍵中,如果存在此鍵值,就把新值賦給他,實現重新命名操作。如果不存在,則建立乙個新的鍵值。
二.程式設計和執行環境以及要準備的工作
i>視窗系統2000伺服器版
ii>.net framework sdk beta 2版
iii>由於在程式中,要修改乙個已經存在的鍵值,所以就要預先設定好鍵值所在的位置。開啟登錄檔的編輯器,在"hkey_local_machine"主鍵下面的"hardware"子鍵下面建立"aaa"子鍵並在此子鍵下面建立乙個名稱為"bbb"的鍵值。具體如下圖所示:
三.程式的主要功能以及設計的重要步驟
在下面介紹的程式中,主要的功能是用visual c#在登錄檔中建立乙個主鍵、乙個子鍵和修改乙個指定的鍵值。其中要建立的子鍵的結構層次是在主鍵"hkey_local_machin"下面的"hareware"主鍵下,名稱為"ddd",其中包含乙個鍵值,名稱為"www",鍵值的值為"1234"。
其中的要建立的主鍵的結構層次也是在主鍵"hkey_local_machin"下面的"hareware"主鍵下,名稱為"main",在此主鍵下面包含乙個名稱為"sub"的子鍵和名稱為"value"鍵值,鍵值的值為"1234"。下面就來著重介紹visual c#是如何建立和修改這些主鍵、子鍵和鍵值的。
(1)如何建立乙個子鍵,在程式中是結合createsubkey ( )方法和setvalue ( )方法來實現的,以下是程式中建立子鍵的源程式:
listbox1.items.clear ( ) ;
registrykey hklm = registry.localmachine ;
registrykey software = hklm.opensubkey ( "hardware" , true ) ;
registrykey main1 = software.createsubkey ( "main" ) ;
registrykey ddd = main1.createsubkey ( "sub" ) ;
ddd.setvalue ( "value" , "1234" );
(2)如何建立乙個主鍵,建立乙個主鍵和建立乙個子鍵的過程大致是差不多的。由於主鍵包含若干子鍵,所以在建立主鍵的時候必須注意他們的層次關係。下面這一段程式,在參考的時候,請注意一下main鍵和sub鍵之間的關係。
listbox1.items.clear ( ) ;
registrykey hklm = registry.localmachine ;
registrykey software = hklm.opensubkey ( "hardware", true ) ;
registrykey main1 = software.createsubkey ( "main" ) ;
registrykey ddd = main1.createsubkey ( "sub" ) ;
ddd.setvalue ( "value" , "1234" ) ;
(3)如何修改註冊資訊。由於登錄檔中的資訊十分重要,所以一般不要對其進行寫的操作。也可能是這個原因,在.net framework sdk 中並沒有提供修改登錄檔鍵的方法。而只是提供了乙個危害性相對較小的方法--setvalue ( ),通過這個方法,我們可以來修改鍵值。下面程式**是修改乙個指定鍵值名稱的鍵值。當然由於setvalue( )方法的特性,如果它檢測到這個鍵值不存在,就會建立乙個新的鍵值。
listbox1.items.clear ( ) ;
registrykey hklm = registry.localmachine ;
registrykey software = hklm.opensubkey ( "hardware", true ) ;
registrykey dddw = software.opensubkey ( "aaa" , true ) ;
dddw.setvalue ( "bbb" , "abcd" ) ;
以下是程式執行的介面:
reg.cs程式**如下:
using system ;
using system.drawing ;
using system.collections ;
using system.componentmodel ;
using system.windows.forms ;
using system.data ;
using microsoft.win32 ;
//匯入使用到的命名空間
public class form1 : form
//清除在程式中使用過的資源
public override void dispose ( )
//初始化程式中使用到的元件
private void initializecomponent ( )
//以列表形式顯示"hardware"下面一層的子鍵和鍵值
protected void button1_click ( object sender , system.eventargs e ) }
} //建立子鍵和鍵值
protected void button2_click ( object sender , system.eventargs e )
//建立乙個主鍵並建立乙個鍵值
protected void button3_click ( object sender , system.eventargs e )
//重新命名乙個存在的鍵值
protected void button4_click ( object sender , system.eventargs e )
public static void main ( )
} [/b]
登錄檔學習筆記 登錄檔的位置
20180228 今天學習登錄檔的位置 文中說 在windows 98 me作業系統中,登錄檔主要由 system.dat 和 user.dat 這兩個登錄檔資料庫檔案組成。通常是在 c windows 中。system.dat包含系統硬體和軟體的設定,user.dat則儲存著與使用者有關的資訊。知...
c 操作登錄檔
1.讀取指定名稱的登錄檔的值 private string getregistdata string name 以上是讀取的登錄檔中hkey local machine software目錄下的 目錄中名稱為name的登錄檔值 2.向登錄檔中寫資料 private void wtregedit st...
C 登錄檔操作
寫這篇日誌以前不是沒有接觸過c 來操作登錄檔,但這次的體會更深入了一點,故筆記如下。首先可以從 登錄檔reg檔案語法規則 了解下.reg檔案的語法規則,因為很多時候是把.reg裡的 轉換為程式裡的啊。知道語法後,可以根據裡面的 開始逐個轉化為c 了。首先是建立hkey,呼叫regcreatekey或...