全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2723
推到 Plurk!
推到 Facebook!

怎样使用TRegistry/TRegIniFile来对注册表的值进行枚举

尚未結案
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-29 20:53:48 IP:211.162.xxx.xxx 未訂閱
大大们,小弟的问题又来了,请在思想上点拨我吧! 在 class="code"> 头文件中: #include 单元文件中: void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString sCurrentPath,sCurrentKey,sValue; sCurrentPath = "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; sCurrentKey = "NvCplDaemon"; TRegistry *Reg = new TRegistry; try { Reg->RootKey = HKEY_LOCAL_MACHINE; if(Reg->OpenKey(sCurrentPath,true)) { sValue = Reg->ReadString(sCurrentKey); } } __finally { Reg->CloseKey(); delete Reg; } CheckListBox1->Items->Add(sValue); } 这样做就可以将值读出来,但是我的问题来了,我现在是不知道具体的sCurrentKey值,我想把该主键下的所有子键全部读出来,然后在针对每个值去读, 就是想把子键枚举出来?我看了Help,上面好象就只有Reg->Access = KEY_ENUMERATE_SUB_KEYS代表可以枚举?但是我不知道该这样使用,请大大们点拨一下我 ,还有,在>>
------
人生在勤,不索何获?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-29 21:22:31 IP:61.62.xxx.xxx 未訂閱
要列舉出所有的鍵名, 可以使用 GetKeyNames , 要列舉所有的值名, 可以使用 GetValueNames, 試試看:    
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        AnsiString sCurrentPath,sCurrentKey,sValue;
        sCurrentPath = "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
        
        TRegistry *Reg = new TRegistry;
        TStringList *str = new TStringList;
        try
        {
            Reg->RootKey = HKEY_LOCAL_MACHINE;
            if(Reg->OpenKey(sCurrentPath,true))
            {
                Reg->GetKeyNames(str);
                ShowMessage(str->Text);
                Reg->GetValueNames(str);
                ShowMessage(str->Text);                
            }
        }
        __finally
        {
            Reg->CloseKey();
            delete Reg;
            delete str;
        }            CheckListBox1->Items->Add(sValue);
}    
至於 REG_EXPAND_SZ 直接使用 WriteExpandString 取代 WriteString 即可!! WriteExpandString 的型態即是 REG_EXPAND_SZ 發表人 - timhuang 於 2003/06/29 21:42:46
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-29 23:12:22 IP:211.162.xxx.xxx 未訂閱
真是感谢timhuang大哥的指点,想不到我要找的WriteExpandString()就在我的眼面前,从这点上就知道我应该加强VCL的基本功,谢谢,现改一下代码,我还有问题:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        TStringList *str = new TStringList;
        AnsiString sCurrentPath;
        sCurrentPath= "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";            TRegistry *Reg1 = new TRegistry;
        try
        {
            Reg1->RootKey = HKEY_LOCAL_MACHINE;
            if(Reg1->OpenKey(sCurrentPath,true))
            {
                Reg1->GetValueNames(str);
            }            }
        __finally
        {
            Reg1->CloseKey();
            delete Reg1;
        }            CheckListBox1->Items->AddStrings(str);
        str->Clear();                               //清空            TRegistry *Reg2 = new TRegistry;
        try
        {
            Reg2->RootKey = HKEY_CURRENT_USER;
            if(Reg2->OpenKey(sCurrentPath,true))
            {
                Reg2->GetValueNames(str);
            }
        }
        __finally
        {
            Reg2->CloseKey();
            delete Reg2;
        }            CheckListBox1->Items->AddStrings(str);
        delete str;
}
这样我就把开机自动运行的程序读出来了,可是还有一个啊,在C:\Documents and Settings\Administrator\「开始」菜单\程序\启动 里的lnk文件该怎样读呢?读出来后又怎么样存入CheckListBox呢?对于TString是不能直接用的,要使用它的派生类,但是我理解的还不是很深刻,请大大指点. 最后一个问题: 对于CheckListBox除了在前面有复选框以外,是否还可以显示略 索图,因为我看见超级兔子可以在CheckListBox前面放置略索图(它是用VB做的) 再一次感谢timhuang大哥的帮助 人生在勤,不索何获?
------
人生在勤,不索何获?
系統時間:2024-04-20 13:38:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!