查看完整版本: [-- 关于Win7 Qt5.12 调用QSysInfo::productVersion()获取操作系统版本异常的问题 --]

QTCN开发网 -> Qt基础编程 -> 关于Win7 Qt5.12 调用QSysInfo::productVersion()获取操作系统版本异常的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

lwei24 2023-01-29 17:07

关于Win7 Qt5.12 调用QSysInfo::productVersion()获取操作系统版本异常的问题

如题,在Win7 Qt5.12环境下,调用
  1. QSysInfo::productVersion()
结果获取的值是unknown,当前操作系统版本是windows 7(6.1.7601 Service Pack 1 Build 7601)
然后通过win API接口获取操作系统版本
  1. 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接口获取操作系统相关信息:
  1. QSysInfo::kernelVersion()
其值为5.1.2600,为啥获取的值不是6.1.7601呢?这其中是哪里出问题了,欢迎各位大佬们指点一二,小弟在此多谢了!!



20091001753 2023-01-30 10:47
我是 Win11 22H2
productVersion 返回 11
kernelVersion 返回 10.0.22621

lwei24 2023-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接口获取的版本却不一致。为啥会有这种现象呢?

fsu0413 2023-01-30 19:25
印象中 Win8之前用 GetVersionEx,可以返回正确值
1楼的结果就是对的,win11的内核版本也是10

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

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

哦哦


查看完整版本: [-- 关于Win7 Qt5.12 调用QSysInfo::productVersion()获取操作系统版本异常的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled