2010-01-20 19 views
9

Lavorare su un progetto e deve essere in grado di determinare se l'O/S è Windows 7, Vista o predefinito su XP. Capisco che potrei imbattersi in Win2K e nelle versioni precedenti, ma diciamo che non è un problema dato che il codice verrà catturato prima che arrivi a questo punto. Per il momento la mia applicazione sarà in C++ usando VS2005. Ho trovato articoli e codice di esempio allo stesso modo ma sembrano molto gonfie per i miei usi. Sto solo cercando un ritorno veloce e sporco.Determinare se O/S è Windows 7

http://msdn.microsoft.com/en-us/library/ms724358%28VS.85%29.aspx

risposta

18

Elenco dei Windows Version, utilizzando GetVersionEx:

Version Number Description 
6.1    Windows 7 /Windows 2008 R2 
6.0    Windows Vista/Windows 2008 
5.2    Windows 2003 
5.1    Windows XP 
5.0    Windows 2000 
+0

Sfortunatamente questo non fa distinzione tra le recenti piattaforme Workstation e Server. Vedi: http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=10476 –

+0

Vedere anche http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions per un elenco aggiornato. È anche possibile testare osvi.wProductType == VER_NT_WORKSTATION per le versioni "normale" o "Server" di Windows: ad esempio, 6.1 è Windows 7 (true) o Windows Server 2008 R2 (false). – ddevienne

18

In generale, non si vuole essere testato contro uno specifico numero di versione, ma piuttosto il controllo di una particolare caratteristica. Se si vuole veramente da rilevare "di Windows 7 o versione successiva," però ...

#include <windows.h> 

bool IsWin7OrLater() { 
    DWORD version = GetVersion(); 
    DWORD major = (DWORD) (LOBYTE(LOWORD(version))); 
    DWORD minor = (DWORD) (HIBYTE(LOWORD(version))); 

    return (major > 6) || ((major == 6) && (minor >= 1)); 
} 

Per il 2000, confrontare maggiori e minori contro, rispettivamente, 5 e 0,. Per XP, confrontare contro 5 e 1. Per Vista, 6 e 0.

3

Windows 8.1 SDK 1) ha introdotto una serie di Version Helper functions, che aiutano a determinare la versione del sistema operativo di un'applicazione è in esecuzione su:

#include <VersionHelpers.h> 

... 

    if (IsWindows7OrGreater()) { 
     // Windows 7 or above 
    } else if (IsWindowsVistaOrGreater()) { 
     // Windows Vista 
    } else if (IsWindowsXPOrGreater()) { 
     // Windows XP 
    } else { 
     // Unsupported version of Windows 
    } 

Se è necessario distinguere tra le edizioni client e server di Windows, è possibile chiamare IsWindowsServer.


1) L'SDK di Windows 8.1 può essere utilizzato per creare applicazioni per tutte le versioni supportate di Windows.

Problemi correlati