![](/img/trans.png)
[英]How do I read the windows registry (Default) value using QSettings?
[英]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,但它在你能做的事情上也更受限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.