Qt4 - 从注册表访问 Windows Machine Guid
Qt4 - Access Windows Machine Guid from registry
我想访问存储在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();
这对我自己来说非常有效。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux for Windows上编译C++代码时出错
- 在Windows上用C++裁剪HBITMAP
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 在Windows中以.exe的形式运行c++
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 无法在windows控制台中为C++程序提供必要的输入
- 在Windows中查找扬声器输出的当前音量级别
- Windows.h与GLFW.h的接口
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- Windows Machine Learning (winML) on ARM
- OpenGL渲染不适用于Linux Machine(Windows Renders)---可能与CMAKE脚本有关(请参
- Qt4 - 从注册表访问 Windows Machine Guid