DWORD wStrSize = 512;
CString strValue;
TCHAR *wStr = new TCHAR[wStrSize];
DWORD dwCountOfSubKey;
DWORD dwCountOfValue;
DWORD dwType;
LONG lResult;
CRegKey regKey;
regKey.Open(HKEY_CURRENT_USER, m_strKey);
lResult = ::RegQueryInfoKey(regKey.m_hKey, NULL, NULL, NULL,
&dwCountOfSubKey, NULL, NULL, &dwCountOfValue, NULL, NULL, NULL, NULL);
if (lResult != ERROR_SUCCESS)
return false;
for (int i = 0; i < dwCountOfValue; ++i)
{
wStrSize = 512; //必须要在循环体内重新设置该值,因为wStrSize每次会被RegEnumValue改变,用来接受下一个wStr
//如果不重新设置,你会发现遍历只能进行一两次
lResult = RegEnumValue(regKey.m_hKey, m_dwIndex, wStr, &wStrSize, NULL, &dwType,NULL, NULL);
if (lResult != ERROR_SUCCESS)
return false;
if (wcscmp(wStr, _T("")) == 0)
continue;
if (FindString(0, wStr) == CB_ERR)
AddString(wStr);
}
delete []wStr;
regKey.Close();
return true;