按原来的方法获取系统版本的时候,是无法正常获取到win11系统的,我们可以利用小版本号来判断当前的系统是win10,还是win11
定义一个宏,用来区分是win10 和 win11系统
#define SYSTEM_VERSION_WIN11_MINORVERSION 22000
当获取到的版本号 >= 22000的时候,我们可以判断为win11系统
const QString getSystemVersion()
{
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
PGNSI pGNSI;
SYSTEM_INFO sysInfo;
ZeroMemory(&sysInfo, sizeof(SYSTEM_INFO));
pGNSI = (PGNSI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
QString sysBit = "unknown";
if (pGNSI)
{
pGNSI(&sysInfo);
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ||
sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64)
{
sysBit = " x64";
}
else {
sysBit = " x86";
}
}
QString version = "(" + QSysInfo::kernelVersion() + ")";
QString minorVersion = QSysInfo::kernelVersion();
minorVersion = minorVersion.mid(minorVersion.lastIndexOf(".")+1);
if (minorVersion >= SYSTEM_VERSION_WIN11_MINORVERSION)
{
//Windows 11 系统
QString strSystemVersion = "Windows 11 " + sysBit + " " + version;
return strSystemVersion;
}
QString osDescirbe = QSysInfo::prettyProductName() + " " + sysBit + " " + version;
return osDescirbe;
}
输出的内容:
Windows 10 (10.0) x64 (10.0.19045)