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

C Builder中注冊表的操作

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

C Builder中注冊表的操作

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

屬性 類型 描述

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。分別對應(yīng)注冊表中相應(yīng)的主鍵。生成一個TRegistry 類的實例時RootKye 缺省值為HKEY_CURRENT_USER

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

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

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

它,不過你可以不必調(diào)用此方法,因為TRegistry 的析構(gòu)函數(shù)會自動調(diào)用它。

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

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

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

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

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

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

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

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

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

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

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

1) 建立TRegistry 類

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

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

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

,

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

好了,說了那么多,也該舉一個實例來說明,下面我就以我的《WinNT 自動登錄》來說明TRegistry 類的用法。

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

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

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

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

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

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

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

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

AutoRun.OpenKey("SOFTWAREMicrosoftWindowsCurrentVersionRun",true);

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

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

,

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

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

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; //本程序是否自動運行

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

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

if(chkAutorun->Checked)

{

Timer1->Enabled=true; //自動運行開始計時 edRePasswd->Text=edPasswd->Text;

}

}

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

首先在窗體的頭文件窗體類定義加入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ù)是否選擇了自動運行來決定是否啟動定時器

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

{

Timer1->Enabled=false;//如果不是自動運行,定時器失效 delay=0;

}

else

Timer1->Enabled=true;//否則定時器有效

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

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

{

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

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

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

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

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

,

if(!chkAutorun->Checked)//如果不自動運行

{

TRegistry &AutoRun=* new TRegistry();

AutoRun.RootKey=HKEY_LOCAL_MACHINE; //找到自動啟動

AutoRun.OpenKey("SOFTWAREMicrosoftWindowsCurrentVersionRun",true);

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

delete &AutoRun;

}

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

}

else

{

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

}

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

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

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

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

標(biāo)簽: