0

我想知道是否有機會檢查我真正使用的Windows版本。類似於:How do I check OS with a preprocessor directive?如何使用預處理器指令檢查操作系統版本(Windows)?

我試圖從MSDN代碼:

  1. 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/ms724832(v=vs.85).aspx我的代碼應該上打印5.1的時候林Windows XP但它顯示5 ...)

是否有任何可靠的方法(我寧願預處理器指令的方式)f指出我正在使用哪個Windows?

我的代碼:

#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; 
} 
+0

這將是一個有點難以建立與預處理指令。當您需要更新的功能時,您必須告訴標題有一個原因。 – chris

+0

@chris:好的,沒有預處理指令 - 有可能嗎? – mazix

+0

我能說的最好的就是'GetVersion'的東西。我不確定你爲什麼會得到錯誤的答案。 – chris

回答

2

你實際上得到正確的結果。但是,你只打印主要版本:

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

而是嘗試使用:

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