簡體   English   中英

我如何使用注冊表?

[英]How do I use the registry?

在最簡單的條件下(我是一個缺乏最新詳細編程知識的偶然程序員),有人可以解釋在codegear C ++(2007)中使用注冊表的最簡單方法。

我在一個舊的(OLD!)程序中有一行代碼,這個程序導致啟動時間顯着延遲...

DLB-> Directory = pIniFile-> ReadString(“Options”,“Last Directory”,“no key!”);

代碼正在使用ini文件。 我希望能夠使用注冊表(編寫變量,例如應用程序使用的最后一個目錄)

但具體細節並不重要。 我只是喜歡使用特定於codegear c ++ builder的注冊表的通用方法。

我用谷歌搜索了這個,但像往常一樣,我得到了很多關於c ++ builder的頁面和一些關於windows注冊表的頁面,但沒有解釋如何使用另一個的頁面。

使用TRegistry類...(包括registry.hpp)

//Untested, but something like...
TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_CURRENT_USER; // Or whatever root you want to use
reg->OpenKey("theKey",true);
reg->ReadString("theParam",defaultValue);
reg->CloseKey();

注意,打開和讀取ini文件通常非常快,所以也許你需要測試你的假設,即讀取ini實際上是你的問題,我不認為只是從注冊表中獲取你的目錄名稱而不是解決你的問題。

包括Registry.hpp文件:

#include <Registry.hpp>

然后在您擁有的任何函數中,您可以編寫以下內容來讀取值:

String __fastcall ReadRegistryString(const String &key, const String &name, 
    const String &def)
{
    TRegistry *reg = new TRegistry();
    String result;

    try {
        reg->RootKey = HKEY_CURRENT_USER;

        if (reg->OpenKeyReadOnly(key)) {
            result = reg->ReadString(name, def);
            reg->CloseKey();
        }
    }
    __finally {
        delete reg;
    }

    return result;
}

因此,閱讀該值應該像以下一樣簡單:

ShowMessage(ReadRegistryString("Options", "Last Directory", "none"));

您可以使用以下內容來編寫值:

void __fastcall WriteRegistryString(const String &key, const String &name, 
    const String &value)
{
    TRegistry *reg = new TRegistry();

    try {
        reg->RootKey = HKEY_CURRENT_USER;

        if (reg->OpenKey(key, true)) {
            reg->WriteString(name, value);
            reg->CloseKey();
        }
    }
    __finally {
        delete reg;
    }
}

應該是自我解釋,記住try ...終於在使用VCL TRegistry類時真的很有用。

編輯

我聽說.ini文件存儲在Windows的注冊表中,所以如果你想要ini文件的速度優勢,你應該把它們叫做別的東西 - 比如.cfg

這是我從一個雖然可靠的來源聽到的,我沒有親自測試過。

蒂姆是對的,但使用的更簡單的類是TIniRegFile,但它在你能做的事情上也更受限制。

請參閱Qt 4.5庫中 QSettings類的文檔。 它允許您以跨平台的方式輕松加載和存儲程序的配置設置。 Windows實現使用Windows注冊表來加載和存儲程序的配置數據。 在其他平台上,將使用平台首選的本機存儲配置數據機制。 這比直接與Windows注冊表交互要好得多,因為您不會綁定到特定平台。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM