Windows注冊(cè)表中包含了系統(tǒng)配置、機(jī)器硬件配置、Win32應(yīng)用程序和用戶(hù)的其他配置信息。注冊(cè)表根據(jù)系統(tǒng)信息分為六個(gè)根鍵(RootKey),其中每個(gè)根鍵各有一個(gè)由子鍵和鍵值組成的樹(shù)狀結(jié)構(gòu),每個(gè)子鍵代表一個(gè)特定的配置項(xiàng)目。
用C++Builer控制注冊(cè)表的關(guān)鍵在于了解TRegistry 類(lèi)。在C++Builder的VCL類(lèi)庫(kù)中,提供了TRegistry類(lèi),通過(guò)在應(yīng)用程序中生成這個(gè)類(lèi)的實(shí)例,我們可以實(shí)現(xiàn)對(duì)注冊(cè)表的控制。在TRegistry類(lèi)中,重點(diǎn)應(yīng)該掌握如下問(wèn)題:
1.TRegistry類(lèi)的生成
我們不能用直接聲明的方法生成TRegistry的實(shí)例,這與VC++中用HKEY直接生成實(shí)例的方法不同。必須采用new關(guān)鍵字生成TRegistry 類(lèi)的實(shí)例,然后將指針傳遞給聲名的變量。具體操作如下:
TRegistry * curReg=new TRegistry;//curReg是 TRegistry類(lèi)型的指針名
采用這個(gè)方式聲明后,curReg的RootKey屬性指向 HKEY_CURRENT_USER根鍵,即默認(rèn)操作是針對(duì)HKEY_CURRENT_USER進(jìn)行的。
2.如何打開(kāi)和關(guān)閉主鍵
TRegistry類(lèi)提供了兩個(gè)成員函數(shù)打開(kāi)一個(gè)主鍵: OpenKey()和OpenKeyReadOnly()函數(shù)。其中,OpenKey函數(shù)同時(shí)提供了創(chuàng)建主鍵的功能。
OpenKey()有兩個(gè)參數(shù),KeyName和canCreate。canCreate 是一個(gè)bool型參數(shù),當(dāng)它設(shè)置成true時(shí),如果當(dāng)前根鍵下不存在AnsiString類(lèi)的變量 KeyName所指出的主鍵,則創(chuàng)建這個(gè)主鍵;否則進(jìn)入KeyName指出的主鍵。如果canCreate 設(shè)置成false,而當(dāng)前根鍵下沒(méi)有KeyName指出的主鍵,則函數(shù)返回false。
OpenKeyReadOnly()函數(shù)的功能是以只讀方式打開(kāi)一個(gè)主鍵,如果參數(shù)值是NULL,則指向RootKey指明的鍵。
KeyName參數(shù)有兩種表示方法:絕對(duì)路徑表示和相對(duì)路徑表示。采用絕對(duì)路徑表示時(shí),串值必須以“\\"開(kāi)頭;采用相對(duì)路徑則表示KeyName指明的主鍵是相對(duì)于當(dāng)前主鍵而言的。
在注冊(cè)表使用完畢后,應(yīng)當(dāng)及時(shí)調(diào)用CloseKey()成員函數(shù)關(guān)閉注冊(cè)表,并調(diào)用delete方法將用new申請(qǐng)的內(nèi)存空間釋放。
用C++Builer控制注冊(cè)表的關(guān)鍵在于了解TRegistry 類(lèi)。在C++Builder的VCL類(lèi)庫(kù)中,提供了TRegistry類(lèi),通過(guò)在應(yīng)用程序中生成這個(gè)類(lèi)的實(shí)例,我們可以實(shí)現(xiàn)對(duì)注冊(cè)表的控制。在TRegistry類(lèi)中,重點(diǎn)應(yīng)該掌握如下問(wèn)題:
1.TRegistry類(lèi)的生成
我們不能用直接聲明的方法生成TRegistry的實(shí)例,這與VC++中用HKEY直接生成實(shí)例的方法不同。必須采用new關(guān)鍵字生成TRegistry 類(lèi)的實(shí)例,然后將指針傳遞給聲名的變量。具體操作如下:
TRegistry * curReg=new TRegistry;//curReg是 TRegistry類(lèi)型的指針名
采用這個(gè)方式聲明后,curReg的RootKey屬性指向 HKEY_CURRENT_USER根鍵,即默認(rèn)操作是針對(duì)HKEY_CURRENT_USER進(jìn)行的。
2.如何打開(kāi)和關(guān)閉主鍵
TRegistry類(lèi)提供了兩個(gè)成員函數(shù)打開(kāi)一個(gè)主鍵: OpenKey()和OpenKeyReadOnly()函數(shù)。其中,OpenKey函數(shù)同時(shí)提供了創(chuàng)建主鍵的功能。
OpenKey()有兩個(gè)參數(shù),KeyName和canCreate。canCreate 是一個(gè)bool型參數(shù),當(dāng)它設(shè)置成true時(shí),如果當(dāng)前根鍵下不存在AnsiString類(lèi)的變量 KeyName所指出的主鍵,則創(chuàng)建這個(gè)主鍵;否則進(jìn)入KeyName指出的主鍵。如果canCreate 設(shè)置成false,而當(dāng)前根鍵下沒(méi)有KeyName指出的主鍵,則函數(shù)返回false。
OpenKeyReadOnly()函數(shù)的功能是以只讀方式打開(kāi)一個(gè)主鍵,如果參數(shù)值是NULL,則指向RootKey指明的鍵。
KeyName參數(shù)有兩種表示方法:絕對(duì)路徑表示和相對(duì)路徑表示。采用絕對(duì)路徑表示時(shí),串值必須以“\\"開(kāi)頭;采用相對(duì)路徑則表示KeyName指明的主鍵是相對(duì)于當(dāng)前主鍵而言的。
在注冊(cè)表使用完畢后,應(yīng)當(dāng)及時(shí)調(diào)用CloseKey()成員函數(shù)關(guān)閉注冊(cè)表,并調(diào)用delete方法將用new申請(qǐng)的內(nèi)存空間釋放。