• 772阅读
  • 4回复

[讨论]关于Win7 Qt5.12 调用QSysInfo::productVersion()获取操作系统版本异常的问题 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2023-01-29
如题,在Win7 Qt5.12环境下,调用
  1. QSysInfo::productVersion()
结果获取的值是unknown,当前操作系统版本是windows 7(6.1.7601 Service Pack 1 Build 7601)
然后通过win API接口获取操作系统版本
  1. BOOL GetVersionFx(POSVERSIONINFOEXW osvi)
  2. {
  3.     static FuncRtlGetVersion pRtlGetVersion = NULL;
  4.     if (pRtlGetVersion == NULL)
  5.     {
  6.         HMODULE hModule = GetModuleHandle(L"ntdll.dll");
  7.         if (hModule)
  8.         {
  9.             pRtlGetVersion = (FuncRtlGetVersion)GetProcAddress(hModule, "RtlGetVersion");
  10.         }
  11.     }
  12.     if (pRtlGetVersion)
  13.     {
  14.         if (pRtlGetVersion(osvi) >= 0) // NT_SUCCESS(pRtlGetVersion(osvi)
  15.         {
  16.             return TRUE;
  17.         }
  18.     }    
  19.     return FALSE;
  20. }
  21.     OSVERSIONINFOEX osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
  22.     GetVersionFx((OSVERSIONINFOEX*)&osvi);
  23.     //osvi.dwMajorVersion此处也是等于5,实际MFC中是获取的值是6,实际操作系统对应的值是6
调用Qt接口获取操作系统相关信息:
  1. QSysInfo::kernelVersion()
其值为5.1.2600,为啥获取的值不是6.1.7601呢?这其中是哪里出问题了,欢迎各位大佬们指点一二,小弟在此多谢了!!


离线20091001753

只看该作者 1楼 发表于: 2023-01-30
我是 Win11 22H2
productVersion 返回 11
kernelVersion 返回 10.0.22621
(づ ̄ 3 ̄)づ
离线lwei24

只看该作者 2楼 发表于: 2023-01-30
回 20091001753 的帖子
20091001753:我是 Win11 22H2
productVersion 返回 11
kernelVersion 返回 10.0.22621 (2023-01-30 10:47) 

大佬,那判断操作系统版本是应该是以哪个接口为准?productVersion?我在win7 sp1下用Qt调用windows接口获取的版本和Qt 自己的接口QSysInfo获取的操作系统版本虽然一致,但与MFC调用windows接口获取的版本却不一致。为啥会有这种现象呢?
1条评分金钱+10
20091001753 金钱 +10 https://blog.csdn.net/rankun1/article/details/55224442 2023-01-30
离线fsu0413

只看该作者 3楼 发表于: 2023-01-30
印象中 Win8之前用 GetVersionEx,可以返回正确值
1楼的结果就是对的,win11的内核版本也是10

貌似微软官方不推荐获取操作系统版本了。。。。
离线lwei24

只看该作者 4楼 发表于: 2023-02-01
回 fsu0413 的帖子
fsu0413:印象中 Win8之前用 GetVersionEx,可以返回正确值
1楼的结果就是对的,win11的内核版本也是10
貌似微软官方不推荐获取操作系统版本了。。。。 (2023-01-30 19:25) 

哦哦
快速回复
限100 字节
 
上一个 下一个