使用QSettings

时间:2018-05-05 13:00:04

标签: windows qt registry qsettings

我尝试使用 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。

1 个答案:

答案 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);