卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

C Builder中注冊(cè)表的操作

C Builder中注冊(cè)表的操作操作就非常的簡(jiǎn)單了,下面我就以一個(gè)實(shí)例來說明TRegistry 類的用法。 首先,先介紹一下TRegistry 的屬性和方法: TRegistry 類一共有四個(gè)屬性

C Builder中注冊(cè)表的操作

操作就非常的簡(jiǎn)單了,下面我就以一個(gè)實(shí)例來說明TRegistry 類的用法。 首先,先介紹一下TRegistry 的屬性和方法: TRegistry 類一共有四個(gè)屬性。

屬性 類型 描述

CurrentKey int 包含當(dāng)前鍵值的值,但它的意思不太好懂,所以不太常用

當(dāng)前鍵值的根鍵,BCB 定義有枚舉常量:HKEY_CURRENT_USER、HKEY_CLASSES_ROOT、HKEY_LOCAL_MACHINE、HKEY_USERS、RootKey int HKEY_CURRENT_CONFIG、HKEY_DYN_DATA 、HKEY_USERS。分別對(duì)應(yīng)注冊(cè)表中相應(yīng)的主鍵。生成一個(gè)TRegistry 類的實(shí)例時(shí)RootKye 缺省值為HKEY_CURRENT_USER

當(dāng)前鍵值的文本描述,HKEY_CURRENT_USERSoftwareBorlandAnsiStrin CurrentPath 的CurrentPath="SoftwareBorland",而g RootKey=HKEY_CURRENT_USER

值為true :只要關(guān)閉一個(gè)鍵,就立即返回應(yīng)用程序。值為false :必LazyWrite bool 須寫完注冊(cè)表后才返回。其缺省值為true 。 TRegistry 類的方法比較多,擇其常用的簡(jiǎn)要說明如下: 方法 描述

CloseKey() 關(guān)閉一個(gè)鍵值并向鍵值寫數(shù)據(jù),只要對(duì)鍵值操作完畢后就應(yīng)該關(guān)閉

它,不過你可以不必調(diào)用此方法,因?yàn)門Registry 的析構(gòu)函數(shù)會(huì)自動(dòng)調(diào)用它。

刪除鍵值,參數(shù)為要?jiǎng)h除的鍵值,如果參數(shù)為空字符串,則刪除當(dāng)DeleteKey(AnsiString) 前鍵值

OpenKey(Ansistring,bool打開一個(gè)鍵值,如果這個(gè)鍵值不存在,將由第二個(gè)參數(shù)決定是否自) 動(dòng)建立。

LoadKey(AnsiString,Ansi從文件裝入鍵值,第一個(gè)參數(shù)為鍵值,第二個(gè)參數(shù)為文件名 String)

KeyExists(AnsiString) 檢測(cè)一個(gè)鍵值是否存在。

SaveKey(AnsiString,Ansi把一個(gè)鍵值保存到文件,參數(shù)說明參見LoadKey() String)

讀出一個(gè)鍵值為整數(shù),如果失敗將拋出異常。同此函數(shù)類似的還有

ReadInteger(AnsiString) ReadBool()、ReadString()、ReadFloat()、ReadDateTome()、

ReadBinaryData()等,用來讀出不同類型的鍵值。

ValueExists(AnsiString) 檢測(cè)一個(gè)值是否存在。

寫一個(gè)鍵值為整數(shù),如果失敗將拋出異常。同此函數(shù)類似的還有WriteInteger(AnsiString,iWriteBool()、WriteString()、WriteFloat()、WriteDateTome()、nt) WriteBinaryData()等,用來寫入不同類型的鍵值。

利用TRegistry 是很容易的,一般來說,有以下四步操作:

1) 建立TRegistry 類

2) 利用OpenKey()方法打開一個(gè)鍵值

3) 用ReadType()和WriteType()讀寫鍵值

4) 調(diào)用CloseKey ()關(guān)閉一個(gè)鍵值。

,

值得注意的是:在使用TRegistry 類時(shí),必須要加入此類的頭文件:#include,否則會(huì)發(fā)生什么,只要稍有C 語言基礎(chǔ)都會(huì)明白。

好了,說了那么多,也該舉一個(gè)實(shí)例來說明,下面我就以我的《WinNT 自動(dòng)登錄》來說明TRegistry 類的用法。

WinNT 的用戶都知道,WinNT 在啟動(dòng)時(shí)需要按Ctrl Alt Del登錄, 即便沒有密碼也是如此. 雖然WinNT 不會(huì)象 WIN9X 那樣經(jīng)常死機(jī), 但每次開機(jī)都要這樣還是有點(diǎn)煩. 能 不能讓W(xué)inNT 每次啟動(dòng)自動(dòng)登錄呢? 其實(shí)只要把注冊(cè)表的一 個(gè)屬性AutoAdminLogon 的值設(shè)置為"1" 即可, 可惜的是這 樣做只能管一次, 每次啟動(dòng)后WinNT 就會(huì)自動(dòng)把它的值改為 "0"(該死的Bill!). 如果每次都要修改注冊(cè)表, 還不如每次手動(dòng)登錄呢! 寫個(gè)程序在啟動(dòng)后自動(dòng)修改這個(gè)值就OK 了。

首先新建一個(gè)工程,在窗體放入4個(gè)文本框,分別命名為:dUser 、edPasswd 、edRePasswd 、edDomain 。分別用來輸入用戶名、登錄口令、重輸口令和域,把edPasswd 和edRePasswd 的PasswordChar 屬性改為"*"(密碼方式輸入) 。再加入2個(gè)復(fù)選框來選擇是否自動(dòng)登錄(chkAuto)和自動(dòng)運(yùn)行(chkAutorun),一個(gè)定時(shí)器(Timer1),2個(gè)按紐(bbtOK、bbtCancel) 和一些Label, 調(diào)整布局如下圖:

打開代碼窗口,在頭部輸入以下代碼:

#includeTRegistry ?key=* new TRegistry();//定義全局變量:注冊(cè)表類。 int delay=0;//定義全局變量,延時(shí)時(shí)間

然后選擇窗體的OnCreat 事件,輸入以下代碼:

regkey.RootKey=HKEY_LOCAL_MACHINE;//設(shè)置根鍵 //打開自動(dòng)登錄所在的鍵

regkey.OpenKey("SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon",true);

//以下3句打開Windows 自動(dòng)運(yùn)行的鍵值。 TRegistry &AutoRun=* new TRegistry(); AutoRun.RootKey=HKEY_LOCAL_MACHINE;

AutoRun.OpenKey("SOFTWAREMicrosoftWindowsCurrentVersionRun",true);

if(strlen(CmdLine)>Application->ExeName.Length() 3)//如果帶參數(shù)運(yùn)行則是要卸載 {

AutoRun.DeleteV alue("Windows NT Auto Logon");//刪除自己加入的屬性

,

regkey.DeleteValue("Windows NT Auto Logon"); delete &AutoRun;

Application->Terminate();//終止應(yīng)用程序 return; } //把本程序?qū)懭胱詣?dòng)運(yùn)行。

AutoRun.WriteString("Windows NT Auto Logon",Application->ExeName);

delete &AutoRun;

edDomain->Text=regkey.ReadString("DefaultDomainName"); //讀出域名

edUser->Text=regkey.ReadString("DefaultUserName"); //讀出用戶名

chkAuto->Checked=true;

chkAutorun->Checked=regkey.ReadString("Windows NT Auto Logon")=="1"?true:false; //本程序是否自動(dòng)運(yùn)行

edPasswd->Text=regkey.ReadString("DefaultPasswd"); //讀出口令

setControl(!chkAutorun->Checked); //如果是自動(dòng)運(yùn)行狀態(tài)把其他屏蔽,反之亦然

if(chkAutorun->Checked)

{

Timer1->Enabled=true; //自動(dòng)運(yùn)行開始計(jì)時(shí) edRePasswd->Text=edPasswd->Text;

}

}

其中setControl()的功能是屏蔽幾個(gè)組件,定義如下:

首先在窗體的頭文件窗體類定義加入void setControl(bool);

其函數(shù)體如下(窗體名為fmMain) :

void TfmMain::setControl(bool t)

{

edUser->Enabled= t;

edRePasswd->Enabled= t;

edPasswd->Enabled= t;

edDomain->Enabled= t;

chkAuto->Enabled= t;

}

在chkAutoRun 的OnClick 事件中根據(jù)是否選擇了自動(dòng)運(yùn)行來決定是否啟動(dòng)定時(shí)器

setControl(!chkAutorun->Checked);//如果是自動(dòng)運(yùn)行狀態(tài)把其他屏蔽,反之亦然 if(!chkAutorun->Checked)

{

Timer1->Enabled=false;//如果不是自動(dòng)運(yùn)行,定時(shí)器失效 delay=0;

}

else

Timer1->Enabled=true;//否則定時(shí)器有效

在按紐bbtOK 的OnClick 事件中輸入以下代碼,其功能是寫入注冊(cè)表。

if(edRePasswd->Text==edPasswd->Text)//如果密碼正確

{

regkey.WriteString("DefaultDomainName",edDomain->Text);//寫入域名

regkey.WriteString("DefaultUserName",edUser->Text);//寫入用戶名

regkey.WriteString("AutoAdminLogon",chkAuto->Checked?"1":"0");//寫入是否自動(dòng)登錄

regkey.WriteString("Windows NT Auto Logon",chkAutorun->Checked?"1":"0");//寫入是否自動(dòng)運(yùn)行

regkey.WriteString("DefaultPasswd",edPasswd->Text);//寫入密碼

,

if(!chkAutorun->Checked)//如果不自動(dòng)運(yùn)行

{

TRegistry &AutoRun=* new TRegistry();

AutoRun.RootKey=HKEY_LOCAL_MACHINE; //找到自動(dòng)啟動(dòng)

AutoRun.OpenKey("SOFTWAREMicrosoftWindowsCurrentVersionRun",true);

AutoRun.DeleteV alue("Windows NT Auto Logon");//刪除自己加入的屬性

delete &AutoRun;

}

Application->Terminate();//程序終止。

}

else

{

ShowMessage("密碼錯(cuò)誤!"); edPasswd->Text="";

}

當(dāng)程序自動(dòng)運(yùn)行時(shí),延時(shí)3秒后寫入注冊(cè)表,在Timer1的OnTimer 事件中寫入如下代碼: delay ; if(delay>=3)//延時(shí)三秒到 bbtOK->Click();//單擊《確定》按紐,寫入注冊(cè)表

然后在bbtCancel 中加入終止程序的代碼:Application->Terminate();我們的程序就算完成了,真的完了嗎?NO !我們?cè)陂_始的時(shí)侯用new 生成了regkey ,應(yīng)該要用delete 刪除它,所以在窗體的OnClose 事件中加入delete &regkey 就OK 了。

如果選擇了自動(dòng)運(yùn)行,程序就能在每次啟動(dòng)時(shí)延時(shí)3秒,然后在修改注冊(cè)表中相應(yīng)的項(xiàng)后退出,釋放系統(tǒng)資源。

怎么樣?很簡(jiǎn)單吧!如果我們平時(shí)注意收集《電腦報(bào)》等報(bào)刊雜志上的有關(guān)注冊(cè)表設(shè)置的文章,再有了功能強(qiáng)大使

標(biāo)簽: