請教各位:
用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個字母了。
這是一個簡單的例子。
查看 "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;
}
問題解決了,不過我發現ZeroMemory(szBuffer,256); 這行可以不要要,只用重新設置dwSize的值就行了,因為RegEnumKeyEx是用&dwSize來調用的,完成后dwSize的值就會改變了,只要重新設置一下就行了,至于上面那行,應該是為防止緩沖區中的值出錯而設置的。