我如何使用注册表?

时间:2009-07-28 22:38:59

标签: c++ registry c++builder

用最简单的术语(我是一个缺乏最新详细编程知识的偶然程序员),有人可以解释在codegear C ++(2007)中使用注册表的最简单方法。

我在一个旧的(OLD!)程序中有一行代码,这个程序导致启动时间显着延迟......

DLB->目录= pIniFile-> ReadString(“选项”,“上一个目录”,“无密钥!”);

代码正在使用ini文件。我希望能够使用注册表(编写变量,例如应用程序使用的最后一个目录)

但具体细节并不重要。我只是喜欢使用特定于codegear c ++ builder的注册表的通用方法。

我用谷歌搜索了这个,但是和往常一样,我得到了很多关于c ++ builder的页面和一些关于windows注册表的页面,但没有解释如何使用另一个页面的页面。

4 个答案:

答案 0 :(得分:10)

使用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实际上是你的问题,我不认为只是从注册表中获取目录名称而不是将解决你的问题。

答案 1 :(得分:3)

包括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

这是我从一个可靠的来源听到的,我没有亲自测试过。

答案 2 :(得分:2)

Tim是对的,但是使用的更简单的类是TIniRegFile,但它在你能做的事情上也更受限制。

答案 3 :(得分:1)

请参阅QSettingsQt 4.5 library课程的文档。它允许您以跨平台的方式轻松加载和存储程序的配置设置。 Windows实现使用Windows注册表来加载和存储程序的配置数据。在其他平台上,将使用平台首选的本机存储配置数据机制。这比直接与Windows注册表交互要好得多,因为您不会绑定到特定平台。