首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RegGetValue返回类型REG_NONE

RegGetValue返回类型REG_NONE
EN

Stack Overflow用户
提问于 2019-01-15 22:55:19
回答 2查看 57关注 0票数 1

我有一个方法,它尝试在两个可能的位置从注册表中读取值。如果成功,则应该返回它。到目前为止,它是有效的。

代码语言:javascript
运行
复制
wstring Tool::GetCustomizedFromRegistry(LPCWSTR szName)
{
    wstring szProdNameLong = L"";
    HKEY hKey;
    LONG res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Test\\Case", 0, KEY_READ, &hKey);
    if (res == ERROR_SUCCESS)
    {
        DWORD size = 1024;
        WCHAR value[1024];
        DWORD type;
        long error = RegGetValue(hKey, NULL, szName, RRF_RT_REG_SZ, &type, &value, &size);

        if (error == ERROR_SUCCESS && type == RRF_RT_REG_SZ && size > 0)
            return wstring(value);
    }

    res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Test", 0, KEY_READ, &hKey);
    if (res == ERROR_SUCCESS)
    {
        DWORD size = 1024;
        WCHAR value[1024];
        long error = RegGetValue(hKey, NULL, szName, RRF_RT_REG_SZ, NULL, &value, &size);
        if (error == ERROR_SUCCESS)
            return wstring(value);
    }

    return L"";
}

自从将我们的一台开发机器更新到Windows10之后,这就不再起作用了。问题是我们检查RegGetValue的类型返回值。这是REG_NONE而不是REG_SZ (在注册表中,它实际上是REG_SZ)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-17 16:19:04

问题是我用错了常量。我使用的RRF_RT_REG_SZ的值为2,RRF_RT_REG_NONE的值为1。将在类型变量中返回1。

我应该使用常量REG_SZ,它实际上是1,所以这个方法返回的值是正确的,但是我把它和错误的常量进行了比较。

我不知道为什么它会起作用。

票数 0
EN

Stack Overflow用户

发布于 2019-01-16 00:02:18

我在windows10上测试了你的代码,它运行得很好。请注意,如果您在X64机器上运行x86应用程序,密钥将位于"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node",只有当您的应用程序为x64时,才能访问“软件\测试\用例”中的密钥。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54201373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档