国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用CB控制Windows注冊表

2019-11-17 05:21:38
字體:
來源:轉載
供稿:網友
    Windows注冊表中包含了系統配置、機器硬件配置、Win32應用程序和用戶的其他配置信息。注冊表根據系統信息分為六個根鍵(RootKey),其中每個根鍵各有一個由子鍵和鍵值組成的樹狀結構,每個子鍵代表一個特定的配置項目。
    用C++Builer控制注冊表的要害在于了解TRegistry 類。在C++Builder的VCL類庫中,提供了TRegistry類,通過在應用程序中生成這個類的實例,我們可以實現對注冊表的控制。在TRegistry類中,重點應該把握如下問題:
    1.TRegistry類的生成
    我們不能用直接聲明的方法生成TRegistry的實例,這與VC++中用HKEY直接生成實例的方法不同。必須采用new要害字生成TRegistry 類的實例,然后將指針傳遞給聲名的變量。具體操作如下:
    TRegistry * curReg=new TRegistry;//curReg是 TRegistry類型的指針名
    采用這個方式聲明后,curReg的RootKey屬性指向 HKEY_CURRENT_USER根鍵,即默認操作是針對HKEY_CURRENT_USER進行的。
    2.如何打開和關閉主鍵
    TRegistry類提供了兩個成員函數打開一個主鍵: OpenKey()和OpenKeyReadOnly()函數。其中,OpenKey函數同時提供了創建主鍵的功能。
    OpenKey()有兩個參數,KeyName和canCreate。canCreate 是一個bool型參數,當它設置成true時,假如當前根鍵下不存在AnsiString類的變量 KeyName所指出的主鍵,則創建這個主鍵;否則進入KeyName指出的主鍵。假如canCreate 設置成false,而當前根鍵下沒有KeyName指出的主鍵,則函數返回false。
    OpenKeyReadOnly()函數的功能是以只讀方式打開一個主鍵,假如參數值是NULL,則指向RootKey指明的鍵。
    KeyName參數有兩種表示方法:絕對路徑表示和相對路徑表示。采用絕對路徑表示時,串值必須以“//"開頭;采用相對路徑則表示KeyName指明的主鍵是相對于當前主鍵而言的。
    在注冊表使用完畢后,應當及時調用CloseKey()成員函數關閉注冊表,并調用delete方法將用new申請的內存空間釋放。
    3.關于當前主鍵下子鍵值的獲取
    我們可以用GetKeyNames()成員函數得到當前主鍵下所有子鍵的名稱,用GetKeyInfo得到更加具體的信息。
    必須指出,雖然GetKeyNames()的說明成void __fastcall GetKeyNames(Classes::TStrings * Strings),也就是說,它的參數類型是TString,但是我們并不能首先聲明一個TString類的實例,然后將它作為參數用于GetKeyNames()。這主要是由于TStrings類含有抽象成分。我們的解決方法是采用TStrings類的派生類TStringList來代替TStrings聲明一個實例,并作為參數用于GetKeyNames()函數。
    在獲得子鍵的名稱后,我們就可以利用有關函數進一步確定具體信息。例如,我們可以用GetValueNames()結合Read()和 Write()獲得主鍵的值的具體信息。例如:我們要讀“/Software/Sybase”中的 “Location”串值的信息,可以執行如下操作:
    curReg->OpenKey(“//Software//Sybase",true);
    AnsiString ValueInfo=CurReg->ReadString(“Location");
    這時,ValueInfo就獲得了Location的值。
    4.關于屬性的說明
    TRegistry類的一個主要屬性是LazyWrite。這個屬性的作用是決定是否在執行寫操作之后立即將所做的改動反映到實際的注冊表中。這個屬性的值在注冊表對象構造時初始化為true,即不立即將所做的改動反映到實際的注冊表中,而是在執行CloseKey()函數之后重寫注冊表,這樣可以提高系統性能。但是,假如我們需要將修改立即反映到注冊表(這在許多場合是必要的),則應當首先將LazyWrite屬性設置為false,然后執行修改操作。
    另一個值得一提的屬性是RootKey,這個屬性規定了當前操作的對象是哪一個根鍵,默認為HKEY_CURRENT_USER。假如需要對其他根鍵進行操作,直接將目標根鍵的值賦給RootKey屬性即可。
    下面請看我們的程序中的一個實際片段,這個例子的功能是將“/Software/MyInfo”主鍵下的所有子鍵名稱顯示在ComboBox1中:
    #include
    …………
    TRegistry *curReg=new TRegistry;
    curReg->OpenKey(“Software//MyInfo",true);
    KeyNames=new TStringList();//注重TstirngList類的聲明方法!
    curReg->GetKeyNames(KeyNames); for(int i=0;iCount;i++) ComboBox1->Items->Add(KeyNames->
    Strings[i]);
    curReg->CloseKey();
    delete KeyNames;
    …………
    由此看來,在C++Builder環境下控制注冊表的問題并不復雜,利用C++強大的類庫,我們可以很輕松地完成這個工作。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汪清县| 望奎县| 眉山市| 海口市| 砚山县| 西贡区| 宁阳县| 濮阳县| 姜堰市| 大足县| 浮梁县| 额济纳旗| 宾川县| 玉屏| 揭阳市| 临武县| 宁武县| 襄垣县| 永胜县| 安平县| 云和县| 龙口市| 玉门市| 都安| 峨山| 揭西县| 襄汾县| 开江县| 蓝山县| 海安县| 镇沅| 龙川县| 梨树县| 玛多县| 惠安县| 雅江县| 普格县| 富顺县| 太白县| 土默特左旗| 喀喇|