使用 C 在 Windows 中获取 OSVersion

新手上路,请多包涵

我必须让我的 OSVersion Windows8 系统(版本应该是 NT 6.2 )的 --- 用于 C++ 应用程序。我尝试使用 GetVersion 函数调用。但它返回给我一个原始值,例如 602931718 。有什么方法可以让我获得 此处 列出的版本,或者如何将此原始值转换为可读形式?

原文由 Jackzz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 897
2 个回答

你看过 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);
}

我不明白,您所说的 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...
}

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

原文由 Mateusz Grzejek 发布,翻译遵循 CC BY-SA 3.0 许可协议

  1. 我已经尝试了上述答案,并且似乎无法正常获取高于 8 的 Windows 操作系统版本。
  2. 因此,经过长时间的努力,我找到了源代码示例,并且它正在正确返回版本。
  3. 在 ‘GetProcAddress’ 的帮助下,获取操作系统的版本真的很容易。此外,我已经尝试了下面的示例链接,它对我来说效果很好。

获取操作系统版本 c++ 源代码

  1. 如果有人在获取操作系统版本时遇到问题,请随时分享您的想法。

原文由 shivcena 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题