請(qǐng)教各位:
用RegEnumKeyEx枚舉一個(gè)鍵下的所有子鍵,例如HKEY_LOCAL_MACHINE\Software\ListItem下有6個(gè)子鍵,分別是111,432fdksaf,fd3425,fd5432,89342,tewjfds,用RegEnumKeyEx可以枚舉出后3個(gè)子鍵(我是從后向前進(jìn)行的),但是只能得到后3個(gè)的全名,前3個(gè)就只能得到前2個(gè)或3個(gè)字母(例如:432fdksaf就只能得到432),不知道為什么,如果是從前向后進(jìn)行就只能得到前3個(gè)的全名,后3個(gè)就只能前2個(gè)或3個(gè)字母了。
這是一個(gè)簡(jiǎn)單的例子。
查看 "http://注意這兩行 "的注釋處。:)
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;
}
問題解決了,不過我發(fā)現(xiàn)ZeroMemory(szBuffer,256); 這行可以不要要,只用重新設(shè)置dwSize的值就行了,因?yàn)镽egEnumKeyEx是用&dwSize來調(diào)用的,完成后dwSize的值就會(huì)改變了,只要重新設(shè)置一下就行了,至于上面那行,應(yīng)該是為防止緩沖區(qū)中的值出錯(cuò)而設(shè)置的。