+ -
当前位置:首页 → 问答吧 → 求助,VC MFC递归遍历注册表问题

求助,VC MFC递归遍历注册表问题

时间:2011-12-01

来源:互联网

先贴代码:

void CLxDlg::EnumerateKeyE(HKEY hKEY,LPCSTR key)
{
HKEY hkey;
if(::RegOpenKeyEx(hKEY,key,0,KEY_WRITE,&hkey) != ERROR_SUCCESS)
{
RegCloseKey(hkey);
return;
}

char subkey[MAX_PATH+1]; //声明最大键长度
DWORD keylen = sizeof(subkey); //设置键实际长度
DWORD Index = 0; //键序数

while(::RegEnumKeyEx(hkey,Index,subkey,&keylen,0,0,0,0) != ERROR_NO_MORE_ITEMS)
{
HKEY h_key;
if(::RegOpenKeyEx(hkey,subkey,0,KEY_WRITE,&h_key) == ERROR_SUCCESS)
{
EnumerateKeyE(h_key,subkey);
::RegCloseKey(h_key);
}
Index++;
keylen = sizeof(subkey); //设置键实际长度
}
}

我是这样调用的 EnumerateKeyE(SubKey,NULL); //遍历注册表

出现的问题是:

While循环那里,下面那个 RegOpenKeyEx , 递归的时候第二次调用时它打开也能成功,不过输出的结果却是乱码,以后的递归全都失败,意思就是说只能打开一级子键,但是子键下面的子键就打不开,下面是调试信息

名称 值
&h_key 0x0012f084 “?” <-- 第一次递归到这里时就是这样了
h_key 0x000001c0
hkey 0x80000001
subkey 0x0012f090 "AppEvents" <-- 这是调用时打开的第一个子键
this 0x0012fd5c

麻烦各位大虾帮我看下,我到底写错在哪里?

作者: qq534888799   发布时间: 2011-12-01

DWORD keylen = sizeof(subkey); //设置键实际长度
改成 DWORD keylen = sizeof(subkey)+1;

作者: agoago_2009   发布时间: 2011-12-01

热门下载

更多