使用C++在Windows中获取OSVersion

Jac*_*kzz 0 c++ windows version

我必须得到OSVersion我的Windows8系统(版本应该是NT 6.2)在C++应用程序中使用.我尝试使用GetVersion函数调用.但它给了我一个原始的价值602931718.是否有某种方法可以获得此处列出的版本或如何将此原始值转换为可读形式?

小智 9

请注意,已弃用函数GetVersion和GetVersionEx.这也反映在他们的文档中.页面说(这个从GetVersion复制):

"随着Windows 8.1的发布,GetVersion API的行为已经改变了它将为操作系统版本返回的值.GetVersion函数返回的值现在取决于应用程序的显示方式."

  • 遗憾的是,_replacement_方法`VerifyVersionInfo`在语义上没有填充相同的角色.它回答了问题"当前版本是否足够好?"而不是"当前版本是什么?"的问题 (5认同)
  • 还有办法获得当前版本吗? (3认同)
  • 您可以使用内核函数 [`RtlGetVersion`](https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-rtlgetversion?redirectedfrom=MSDN) 来获取正确的版本,而不依赖于您的应用程序的表现方式,详见此处 /sf/answers/2558161371/ (3认同)
  • 在 Windows 10 中,[VerifyVersionInfo 函数也已弃用](https://docs.microsoft.com/en-us/windows/desktop/sysinfo/targeting-your-application-at-windows-8-1)。 (2认同)

Mat*_*jek 1

您看过GetVersionEx()函数和OSVERSIONINFOEX结构吗?

可能的用法:

void print_os_info()
{
    OSVERSIONINFOEX info;
    ZeroMemory(&info, sizeof(OSVERSIONINFOEX));
    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

    GetVersionEx(&info);

    printf("Windows version: %u.%u\n", info.dwMajorVersion, info.dwMinorVersion);
}
Run Code Online (Sandbox Code Playgroud)

我不明白,你说的是什么意思NT。根据MSDN

版本表

从Windows XP开始,所有版本都是隐式NT版本。如果您想针对服务器版本进行测试,请检查以下值info.wProductType

if(info.dwMajorVersion == 6)
{
    if (info.dwMinorVersion == 0)
    {
        if (info.wProductType == VER_NT_WORKSTATION)
            //Windows Vista;
        else
            //Windows Server 2008
    }
    else if (info.dwMinorVersion == 1)
    {
        if (info.wProductType == VER_NT_WORKSTATION)
            //Windows 7
        else
            //Windows Server 2008 R2
    }
    else if (...) //etc...
}
Run Code Online (Sandbox Code Playgroud)

还有一件事:您还可以检查 的值info.dwBuildNumber。允许的值之一是VER_PLATFORM_WIN32_NT

  • 从 Windows 8.1 开始已弃用此功能 (16认同)