请教各位:
用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的值就会改变了,只要重新设置一下就行了,至于上面那行,应该是为防止缓冲区中的值出错而设置的。