首页| 论坛| 消息

标题:关于Win7 Qt5.12 调用QSysInfo::productVersion()获取操作系统版本异常的问题
作者:lwei24
日期:2023-01-29 17:07
内容:

如题,在Win7 Qt5.12环境下,调用QSysInfo::productVersion()结果获取的值是unknown,当前操作系统版本是windows 7(6.1.7601 Service Pack 1 Build 7601)
然后通过win API接口获取操作系统版本
BOOL GetVersionFx(POSVERSIONINFOEXW osvi)
{
static FuncRtlGetVersion pRtlGetVersion = NULL;
if (pRtlGetVersion == NULL)
{
HMODULE hModule = GetModuleHandle(L"ntdll.dll");
if (hModule)
{
pRtlGetVersion = (FuncRtlGetVersion)GetProcAddress(hModule, "RtlGetVersion");
}
}

if (pRtlGetVersion)
{
if (pRtlGetVersion(osvi) >= 0) // NT_SUCCESS(pRtlGetVersion(osvi)
{
return TRUE;
}
}
return FALSE;
}

OSVERSIONINFOEX osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
GetVersionFx((OSVERSIONINFOEX*)&osvi);
//osvi.dwMajorVersion此处也是等于5,实际MFC中是获取的值是6,实际操作系统对应的值是6调用Qt接口获取操作系统相关信息:
QSysInfo::kernelVersion()其值为5.1.2600,为啥获取的值不是6.1.7601呢?这其中是哪里出问题了,欢迎各位大佬们指点一二,小弟在此多谢了!!


#1 [20091001753 01-30 10:47]
我是 Win11 22H2
productVersion 返回 11
kernelVersion 返回 10.0.22621
#2 回 20091001753 的帖子 [lwei24 01-30 16:12]
20091001753:我是 Win11 22H2
productVersion 返回 11
kernelVersion 返回 10.0.22621 (2023-01-30 10:47) 
大佬,那判断操作系统版本是应该是以哪个接口为准?productVersion?我在win7 sp1下用Qt调用windows接口获取的版本和Qt 自己的接口QSysInfo获取的操作系统版本虽然一致,但与MFC调用windows接口获取的版本却不一致。为啥会有这种现象呢?
#3 [fsu0413 01-30 19:25]
印象中 Win8之前用 GetVersionEx,可以返回正确值
1楼的结果就是对的,win11的内核版本也是10
貌似微软官方不推荐获取操作系统版本了。。。。
#4 回 fsu0413 的帖子 [lwei24 02-01 15:44]
fsu0413:印象中 Win8之前用 GetVersionEx,可以返回正确值
1楼的结果就是对的,win11的内核版本也是10
貌似微软官方不推荐获取操作系统版本了。。。。 (2023-01-30 19:25) 
哦哦

回复 发表
主题 版块