项目中需要用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;
}
{
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");
}
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");
}
转载于:https://blog.51cto.com/axiii/126673