我尝试使用 QSettings 从Windows注册表中读取 MachineGuid 键。
该密钥的地址是
" HKEY_LOCAL_MACHINE \ SOFTWARE \微软\加密"
我将 QSettings 与 QSettings :: Native 标志一起使用如下。
QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::NativeFormat);
我可以从 regedit.exe 看到所有子文件夹及其键和 MachineGuid 的值,但的值功能QSettings 似乎无法正常工作。
结果如下:
settings.value("MachineGuid").toString();
返回空QString。
settings.childGroups();
正确返回Cryptography文件夹的所有子文件夹。
settings.childKeys();
返回一个空的QStringList
settings.allKeys();
返回Cryptography文件夹中的所有密钥,包括所有子文件夹内的密钥,但MachineGuid
除外,这些密钥位于加密内。
我正在使用在Windows 10上使用Visual Studio 2015静态构建的Qt 5.7.1。
我尝试过使用 Window.h 标头的代码并且我已经成功提取了值,但这种方法的问题是我必须在我发布的软件中添加大量的DLL。
答案 0 :(得分:1)
要使用32位编译代码访问64位Windows操作系统,正确的格式为" Registry64Format
"如果从64位编译器访问32位操作系统,正确的格式为" Registry32Format
"
因此,在我的情况下,在将格式设置为64位后,可以获取密钥。
读取密钥" MachineGuid"在具有32位编译代码的64位操作系统上;
QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",
QSettings::Registry64Format);
auto key = settings.childKeys().at(0);