遍历注册表键名下的所有子键及所有子键数据

abor0489 2012-11-11 11:47:14
HKEY hKey_tmp = NULL;
HKEY hKey = NULL;
TCHAR comNum[20];
TCHAR comNumEx[20];
TCHAR achKey[60];
CString sActive;
DWORD i = 0;
DWORD cbMaxSubKey = 60; //
DWORD dwType = 20;//
DWORD dwSize = sizeof(comNum); //
DWORD retReg,retRegEx;
sActive =_T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\");
retReg=RegOpenKey(HKEY_LOCAL_MACHINE,sActive,&hKey);

if(retReg==ERROR_SUCCESS)
{
while (RegEnumKeyEx(hKey, i, achKey, &cbMaxSubKey, NULL, NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS/*ERROR_SUCCESS*/)
{

if(RegOpenKey(HKEY_LOCAL_MACHINE, sActive+achKey, &hKey_tmp)==ERROR_SUCCESS)
{
retReg=RegQueryValueEx(hKey_tmp, _T("Display"), NULL, &dwType, (BYTE *)&comNumEx, &dwSize) ;
if(retReg==ERROR_SUCCESS)
{
CString str(comNumEx);
m_ComBox.AddString(str);


}
else
{
CString str;
str.Format(_T("%d"),GetLastError());
MessageBox(str);
}
}
else if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, sActive+achKey, 0,0, &hKey_tmp)==ERROR_SUCCESS)

{
retReg=RegQueryValueEx(hKey_tmp, _T("Display"), NULL, &dwType, (BYTE *)&comNumEx, &dwSize) ;
if(retReg==ERROR_SUCCESS)
{

CString str(comNumEx);
m_ComBox.AddString(str);

}

}

dwSize=20;
ZeroMemory(achKey,60);
cbMaxSubKey = 60;
i++;

}
有以下几个问题:1.为什么第二次执行RegQueryValueEx()返回就是0X000000EA值了。
2.RegOpenKey()与RegOpenKeyEx()有什么区别?
求大虾指点迷津。
...全文
76 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧