代码之家  ›  专栏  ›  技术社区  ›  Alex

如何使用RegOpenKeyEx将值存储到字符串?

  •  0
  • Alex  · 技术社区  · 14 年前

    char res[1024] char *res = new char[1024]

    unsigned long type=REG_SZ, size=1024;
    string path;
    char res[1024];
    HKEY key;
    
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Classes\\dsn\\shell\\open\\command"), NULL, KEY_READ, &key)==ERROR_SUCCESS){
    
        RegQueryValueEx(key,
        NULL,// YOUR value
        NULL,
        &type,
        (LPBYTE)res,
        &size);
        RegCloseKey(key);
    
        path = string(res);
    }
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Graham Perks    14 年前

    您将返回一个Unicode字符串,但将其分配给基于字符的字符串。

    您可以将path的类切换为“tstring”或“wstring”,或者使用RegQueryValueExA(表示ASCII)。

        2
  •  0
  •   John Dibling    14 年前

    您正在用Unicode编译。转到“项目设置”>“配置属性”>“常规”,将“字符集”更改为“未设置”,然后重新生成项目。

    RegOpenKey 实际上是WINAPI头中定义的宏。如果启用Unicode,则解析为 RegOpenKeyW RegOpenKeyA . 如果您想继续在unicode下编译,那么只需调用 RetgOpenKeyA

    否则,您将需要处理Unicode字符串,如果需要,我们也可以帮助您处理。

        3
  •  0
  •   Steve Townsend    14 年前

    对于C++,您可能更喜欢使用ATL助手类访问注册表 CRegKey . 存储字符串值的方法是 QueryStringValue . 对于检索和设置不同的注册表值类型,还有其他(某种程度上)类型安全的方法。

    它不是最好的C++接口(例如 std::string 支持),但比本机Win32更流畅。