C++ 用c+枚举HKEY#U LOCAL#U MACHINE\软件中的注册表子项+;

C++ 用c+枚举HKEY#U LOCAL#U MACHINE\软件中的注册表子项+;,c++,C++,我无法枚举HKEY_LOCAL_MACHINE \软件的子键,我只能得到HKEY_LOCAL_MACHINE上的子键 WCHAR Temp[255]; DWORD TMP = 255; HKEY hKey; int count = 0; long regError; ... regError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\", NULL, KEY_ENUMERATE_SUB_KEYS, &hKey); if (regEr

我无法枚举HKEY_LOCAL_MACHINE \软件的子键,我只能得到HKEY_LOCAL_MACHINE上的子键

WCHAR Temp[255];
DWORD TMP = 255;
HKEY hKey;
int count = 0;
long regError;

...

regError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\", NULL, KEY_ENUMERATE_SUB_KEYS, &hKey);
if (regError == ERROR_SUCCESS){
    file<<"Key opened!\nSubkeys of HKEY_LOCAL_MACHINE\\SOFTWARE:\n\n";
    while ((regError = RegEnumKeyEx(HKEY_LOCAL_MACHINE, count, Temp, &TMP, NULL, NULL, NULL, NULL)) == ERROR_SUCCESS){
        TMP = sizeof (Temp);
        count++;
        file<<count<<". "<<Temp<<std::endl;
    }
    if (regError == ERROR_NO_MORE_ITEMS) file<<"Done.";
    else file << std::endl <<"RegEnumKeyEx error!";
}
else file << std::endl <<"RegOpenKeyEx error!";

RegCloseKey(hKey);

如何在HKEY_LOCAL_MACHINE\软件中输出密钥,而不仅仅是HKLM?谢谢。

您将错误的
HKEY
传递给
RegEnumKeyEx()
。您正在传递
HKLM
根目录,但需要传递
RegOpenKeyEx()返回的
HKEY
。换言之,改变这一点:

RegEnumKeyEx(HKEY_LOCAL_MACHINE, ...)
为此:

RegEnumKeyEx(hKey, ...)
RegEnumKeyEx(hKey, ...)