Qt4 - 从注册表访问Windows Machine Guid

时间:2016-03-14 17:40:42

标签: c++ windows qt

我想访问存储在Windows注册表中的Windows操作系统的机器guid。我在Windows 8操作系统上使用Qt 4.8。我只得到一个空字符串。我正在关注Qt' QSettings official doc

   QSettings setting("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::NativeFormat);
    QString mGuid=setting.value("MachineGuid").toString();
    qDebug()<<"Machine Guid is: " <<mGuid;
    qDebug()<<setting.status();   // returns zero means 'no access error'

输出:

Machine Guid is: 

我可以在Windows注册表编辑器的MachineGuid中播种HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography。如何从Windows注册表中读取guid?

2 个答案:

答案 0 :(得分:2)

您的问题是Windows有一个单独的64位和32位注册表视图。

默认情况下,您将获得与您的应用程序的目标体系结构相匹配的注册表视图。在这种情况下,您实际上被重定向到32位视图,因此您的代码正在检查HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography处的密钥

MachineGuid密钥以及许多其他Windows创建的密钥仅存在于64位系统上的64位注册表中。您可以指定从本机API访问哪个注册表视图,但我不知道如何通过Qt进行访问。

答案 1 :(得分:1)

正如@Collin Dauphinee指出的那样,你可能正在访问64位Windows上的32位注册表。

如果是这种情况,您可以访问Qt 5.7,而不是写

QSettings setting("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::NativeFormat);
QString mGuid=setting.value("MachineGuid").toString();

你可以写

QSettings setting("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::Registry64Format);
QString mGuid=setting.value("MachineGuid").toString();

这对我自己很有效。