0

Je voudrais savoir s'il y a une chance de vérifier quelle version de Windows j'utilise vraiment. Quelque chose de similaire à: How do I check OS with a preprocessor directive?.Comment puis-je vérifier la version du système d'exploitation (Windows) avec les directives du préprocesseur?

J'ai essayé le code de 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

Mais aucun d'entre eux m'a donné de bons résultats (par exemple: selon http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx mon code devrait imprimer 5.1 quand je suis sur Windows XP mais il a montré 5 ...)

Existe-t-il un moyen fiable (je préférerais des directives de préprocesseur) à f Indiquer quel Windows j'utilise?

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

Ce serait un peu difficile à mettre en place des directives de préprocesseur. Il y a une raison pour laquelle vous devez indiquer les en-têtes lorsque vous avez besoin d'une fonctionnalité plus récente. – chris

+0

@chris: ok, et sans directives de préprocesseur - est-ce possible? – mazix

+0

Le mieux que je puisse dire est le truc 'GetVersion'. Je ne sais pas pourquoi vous auriez la mauvaise réponse. – chris

Répondre

2

Vous obtenez en fait le bon résultat. Mais vous imprimez seulement la version majeure:

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

Essayez plutôt en utilisant:

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