简体   繁体   English

如何使用预处理程序指令检查操作系统版本(Windows)?

[英]How can I check OS version (Windows) with preprocessor directives?

I would like to know if there is any chance to check which Windows version I really use. 我想知道是否有机会检查我真正使用的Windows版本。 Something similar to: How do I check OS with a preprocessor directive? 类似于: 如何使用预处理程序指令检查操作系统? .

I tried code from MSDN: 我试过MSDN的代码:

  1. http://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx
  2. http://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx

But any of them gave me good results (for example: according to http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx my code should print 5.1 when Im on Windows XP but it showed 5 ...) 但是他们中的任何一个给了我很好的结果(例如:根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx我的代码应该打印5.1时我在Windows XP上,但它显示5 ...)

Is there any reliable way (I would prefer preprocessor directives way) to find out which Windows I'm using? 有没有可靠的方法(我更喜欢预处理器指令的方式)来找出我正在使用的Windows?

My code: 我的代码:

#include <windows.h>
#include <iostream>

int main()
{
    OSVERSIONINFO osvi;
    BOOL bIsWindowsXPorLater;

    ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

    GetVersionEx(&osvi);

    // I HAD THIS, AND IT WAS WRONG! :<
    std::cout << osvi.dwMajorVersion << "\n";

    // CHANGED THE ABOVE LINE TO THE LINE BELOW AND IT IS OK NOW :D
    std::cout << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << "\n";


    return 0;
}

You are actually getting the right result. 你实际上得到了正确的结果。 But you are only printing the major version: 但是你只打印主要版本:

std::cout << osvi.dwMajorVersion << "\n";

Instead try using: 而是尝试使用:

if (osvi.dwMinorVersion >= 1) {
     std::cout << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << std::endl;
} else {
     std::cout << osvi.dwMajorVersion << std::endl;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM