一个关于RegEnumKeyEx的问

请教各位: 
  用RegEnumKeyEx枚举一个键下的所有子键,例如HKEY_LOCAL_MACHINE\Software\ListItem下有6个子键,分别是111,432fdksaf,fd3425,fd5432,89342,tewjfds,用RegEnumKeyEx可以枚举出后3个子键(我是从后向前进行的),但是只能得到后3个的全名,前3个就只能得到前2个或3个字母(例如:432fdksaf就只能得到432),不知道为什么,如果是从前向后进行就只能得到前3个的全名,后3个就只能前2个或3个字母了。
这是一个简单的例子。 
查看 "//注意这两行 "的注释处。:) 

void   CRegistryView::OnButton3()   
{ 
//   TODO:   Add   your   control   notification   handler   code   here 
HKEY   hkey; 
LPCSTR   data_Get= "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run "; 
long   ret0=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Get,0,KEY_ALL_ACCESS,&hkey); 
if   (ret0!=ERROR_SUCCESS) 
{ 
MessageBox( "Error! "); 
return; 
} 
TCHAR   szBuffer[256]; 
DWORD   dwSize=256; 
ZeroMemory(szBuffer,256); 
DWORD   dIndex; 
dIndex=0L; 
while(RegEnumValue(hkey,dIndex,szBuffer,&dwSize,NULL,NULL,NULL,NULL)==ERROR_SUCCESS) 
{ 
MessageBox(szBuffer, " "); 
dIndex++; 
ZeroMemory(szBuffer,256);   //注意这两行 
dwSize=256;                               // 
} 
return; 
}

问题解决了,不过我发现ZeroMemory(szBuffer,256);   这行可以不要要,只用重新设置dwSize的值就行了,因为RegEnumKeyEx是用&dwSize来调用的,完成后dwSize的值就会改变了,只要重新设置一下就行了,至于上面那行,应该是为防止缓冲区中的值出错而设置的。

posted on 2011-01-05 13:24 wrh 阅读(1893) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2011年1月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

常用链接

留言簿(19)

随笔档案

文章档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜