【问题标题】:RegGetValue cannot find name under current user?RegGetValue 在当前用户下找不到名字?
【发布时间】:2020-06-04 06:12:10
【问题描述】:

我正在测试这个功能::RegGetValue。下面的代码返回成功。

DWORD data_size = 0;
LONG result = ::RegGetValue(HKEY_LOCAL_MACHINE,
                            _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\OUTLOOK.EXE"),
                            _T("Path"),
                            RRF_RT_REG_SZ, 
                            NULL, NULL,
                            &data_size);

但是如果我尝试在当前用户下找到不同的条目,即使该条目确实存在,它也会失败。

DWORD data_size = 0;
LONG result = ::RegGetValue(HKEY_CURRENT_USER,
                            _T("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION"),
                            _T("OUTLOOK.EXE"),
                            RRF_RT_REG_SZ, 
                            NULL, NULL,
                            &data_size);

【问题讨论】:

  • 问题是它没有打开FEATURE_BROWSER_EMULATION 键,它没有在其中找到OUTLOOK.EXE 值,还是它没有读取值的数据?三种不同的可能性。失败时result 的实际值是多少?它会告诉你实际发生了什么。此外,在我的系统上,FEATURE_BROWSER_EMULATION 键中没有 OUTLOOK.EXE 值,但我拥有的值都是 Dword 值,而不是 String 值。如果您将RRF_RT_REG_SZ 更改为RRF_RT_REG_DWORD,代码是否有效?

标签: c++ winapi registry


【解决方案1】:

根据 MSDN 文档,FEATURE_BROWSER_EMULATION 键中的所有值都是 DWORD 值,而不是字符串值:

Internet Feature Controls (B..C): Browser Emulation

通过指定RRF_RT_REG_SZ,您告诉RegGetValue() 只读取字符串值。从App Paths 键读取"Path" 值时这是有道理的,但是从FEATURE_BROWSER_EMULATION 键读取时,您需要指定RRF_RT_REG_DWORD

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2014-02-15
    • 2022-12-09
    • 2013-04-18
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多