项目中需要用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");
}