1

我正在尝试读取 C++ 中的注册表项,这是我的功能:

    DWORD regkey()
{
    HKEY hKey;
    DWORD dwDisp = REG_BINARY;
    DWORD dwSize = sizeof(dwDisp);
    DWORD dwValue = 0;
    DWORD dwReturn;
    DWORD dwBufSize = sizeof(dwDisp);

    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HERE\\IS\\THE\\REGKEY",0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
    {
        DWORD error = RegQueryValueEx(hKey,L"key",0,0, (LPBYTE)&dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {
            return dwReturn;
        }
    }

    RegCloseKey(hKey);

    return 0;
}

但它什么也没返回...请帮助我。

4

1 回答 1

0

注册表函数将返回一个有意义的错误代码,这可以帮助您诊断问题。尝试保留该代码:

{
    HKEY hKey;
    DWORD dwDisp = REG_BINARY;
    DWORD dwSize = sizeof(dwDisp);
    DWORD dwValue = 0;
    DWORD dwReturn;
    DWORD dwBufSize = sizeof(dwReturn);

    DWORD dwError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HERE\\IS\\THE\\REGKEY",0, KEY_READ, &hKey) ;
    if( dwError == ERROR_SUCCESS)
    {
        dwError = RegQueryValueEx(hKey,L"key",0,0, (LPBYTE)&dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {
            // it worked!
        }
        else
        {
            // it failed to read, check dwError for the error code
            dwResult = 0;
        }

        RegCloseKey(hKey);
    }
    else
    {
        // it failed to open, check dwError for the error code
        dwResult = 0;
    }


    return 0;
}

如果您使用的是 Visual Studio,则可以中断任何故障点并dwError,hr在监视窗口中进行评估。格式说明,hr符使调试器为您查找错误代码并提供一个有意义的字符串来描述问题。这应该使您了解出了什么问题。

如果您能告诉我们哪个函数出现故障以及您从该函数返回了哪些代码,我们或许能够提供更详细的帮助。就目前而言,您向我们展示了一个猜谜游戏。也许您拼错了注册表项名称或给出了不正确的路径。您的代码似乎暗示您正在传递注册表项RegQueryValueEx(),但您的目的是向该函数传递值名称,而不是键名称。也许您在访问权限方面存在问题,因为您正在查看注册表的受保护部分,并且没有作为具有足够权限来读取该密钥的帐户运行。(所以,你应该通过KEY_READ而不是KEY_ALL_ACCESS。)

于 2013-01-05T15:14:27.743 回答