打开注册表编辑器regedit.exe,界面左边显示的是健,右边显示的是健值,健可以分成主键及子键,健值由键值名称和内容构成,由于在写程序时候没有搞清楚这些基本的概念,导致了API的使用问题,以下程序为枚举某子键下的所有值
const char* s = "I5";
LPSTR strPathName1("...");
HKEY hKey;
HRESULT hr = RegOpenKey(HKEY_LOCAL_MACHINE,strPathName1,&hKey);
if( ERROR_SUCCESS != hr)
{LPSTR strPathName2("...");hr = RegOpenKey(HKEY_LOCAL_MACHINE,strPathName2,&hKey);}if(ERROR_SUCCESS != hr){return FALSE;}DWORD dwIndex = 0;TCHAR
szValueName[MAX_PATH];TCHAR szValue[MAX_PATH];memset(szValueName,0,MAX_PATH*sizeof(TCHAR));memset(szValue,0,MAX_PATH*sizeof(TCHAR));DWORD dwNameLen = MAX_PATH*sizeof(TCHAR);DWORD dwValueLen = MAX_PATH*sizeof(TCHAR);DWORD dwType;while(ERROR_SUCCESS == (hr =
RegEnumValue(hKey,dwIndex,szValueName,&dwNameLen,NULL,&dwType,(LPBYTE)szValue,&dwValueLen)))//while(ERROR_SUCCESS == (hr = RegEnumKeyEx(hKey, dwIndex, szSubKey, &dwNameLen, NULL, NULL, NULL, NULL)))//枚举子键时才用到{if(_tcscmp(szValue,s)){WORD s = (WORD)atoi(szValueName);break;}memset(szValueName,0,MAX_PATH*sizeof(TCHAR));memset(szValue,0,MAX_PATH*sizeof(TCHAR));dwNameLen
= MAX_PATH*sizeof(TCHAR);dwValueLen = MAX_PATH*sizeof(TCHAR);++dwIndex; }RegCloseKey(hKey);