2010-01-20 7 views
9

Trabajando en un proyecto y necesita poder determinar si el O/S es Windows 7, Vista o predeterminado a XP. Entiendo que podría toparme con Win2K y versiones anteriores, pero digamos que eso no es una preocupación ya que otro código lo detectará antes de que llegue a este punto. Mi aplicación estará en C++ por el momento usando VS2005. He encontrado artículos y código de muestra por igual, pero parecen demasiado hinchados para mi uso. Solo estoy buscando un regreso rápido y sucio.Determine si O/S es Windows 7

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

Respuesta

18

Lista de Windows Version, utilizando 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

Desafortunadamente, esto no distingue entre las plataformas recientes de Estación de trabajo y Servidor. Consulte: http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=10476 –

+0

Consulte también http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions para obtener una lista actualizada. También puede probar osvi.wProductType == VER_NT_WORKSTATION para versiones "normales" frente a "Servidor" de Windows: es decir, 6.1 es Windows 7 (verdadero) o Windows Server 2008 R2 (falso). – ddevienne

18

En general, usted no quiere estar poniendo a prueba contra un número de versión específica, sino más bien la comprobación de una característica particular. Si realmente quiere detectar "Windows 7 o posterior," sin embargo ...

#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)); 
} 

Para el año 2000, comparar mayor y menor contra 5 y 0, respectivamente. Para XP, comparar contra 5 y 1. Para Vista, 6 y 0.

3

El SDK de Windows 8.1 1) introducido una serie de Version Helper functions, que ayudan a determinar la versión del sistema operativo se ejecuta una aplicación en:

#include <VersionHelpers.h> 

... 

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

Si necesita distinguir entre las ediciones de cliente y servidor de Windows, puede llamar al IsWindowsServer.


1) El SDK de Windows 8.1 se puede utilizar para crear aplicaciones para todas las versiones compatibles de Windows.