if (lReturn == ERROR_SUCCESS) {
while (ERROR_NO_MORE_ITEMS != RegEnumKeyExA(hkResult,index,szKeyName, &dwKeyLen,0, NULL, NULL, NULL))
{
index++;
if (strcmp(szKeyName,name))
return true;
memset(szKeyName,0,255);
dwKeyLen = 255;
}
}
原因是每调用一次RegEnumKeyExA函数时,他的dwKeyLen值会返回回来,导致dwKeyLen改变,只要将dwKeyLen的值重新赋值一边就可以了。那可能有人会问那既然能返回长度为什么有些值为什么会返回NULL而不是键名的前几个字符呢?我猜测可能是去拿键名的时候,dwKeyLen值会和注册表里面的键名做个判断,如果dwKeyLen的长度大于键名的长度,就把键名拿出来,否则直接退出。