Qt4 - 从注册表访问 Windows Machine Guid

Qt4 - Access Windows Machine Guid from registry

本文关键字:Windows Machine Guid 访问 注册表 Qt4      更新时间:2023-10-16

我想访问存储在Windows注册表中的Windows操作系统的计算机guid。我在Windows 8操作系统上使用Qt 4.8。我只得到一个空字符串。我正在关注Qt的QSettings官方文档

   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 注册表编辑器中以HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography播种MachineGuid。如何从Windows注册表读取GUID?

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

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

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

正如@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();

这对我自己来说非常有效。