項目中需要用wxWidgets對注冊表的鍵值進行讀取.
使用wxRegKey的QueryValue方法讀取相應鍵值時,例如以下代碼。
如果regdelay鍵值不存在會拋出一個異常。那麼對用戶來說體驗很不好.
pRegKey->QueryValue(wxT("regdelay"), keyvaluestr);
查了下手冊,開始發現有一個函數用於返回該鍵值是否存在的布爾值,不過在實際使用中發覺很不穩定,經常得不到正確的返回值。
bool HasSubKey(const wxChar *szKey) const
不知道是自己使用的問題還是wxWidgets庫本身的bug。進度催得緊,於是仔細研究了wxRegKey文檔,寫了一個函數,專門用於檢測某鍵值是否存在,經測試表現還算穩定。
代碼如下:
bool VerifyEnCrptyFunction::RegKeyHasValue(wxString regkey,wxString key)
{
wxRegKey pRegKey (pregkey);
if (pRegKey->Exists())
{
if (pRegKey->Open())
{
if ( pRegKey->HasValue(key))
{
return true;
}
else
{
return false;
}
}
}
return false;
}
具體使用方法:
//用戶保存鍵值
wxString keyvaluestr;
//構造一個注冊表項路徑
wxString regkey=wxT("HKEY_LOCAL_MACHINE\\Software\\iLcd");
if (RegKeyHasValue(regkey,wxT("regdelay")))
{
//有regdelay查詢該鍵值下的內容
pRegKey->QueryValue(wxT("regdelay"), keyvaluestr);
}
else
{
//沒有regdelay返回no value
keyvaluestr=wxT("no value");
}
本文出自 “九黎部落” 博客,請務必保留此出處http://axiii.blog.51cto.com/396236/126673