Im Grunde ist das Ganze nicht schwer zu realisieren. Zuerst enumerieren wir für uns valide OS systeme durch:
Es sollte klar sein, was hier passiert: WIN_2000 ist nun als 0 definiert, Win_XP als 1, WIN_VISTA als 2 und WIN_7 als 3.
Im folgenden habe ich kurz eine Funktion geschrieben, die das OS gemäß unserer Enumeration als Integer-Wert zurückgibt:
Die Infos zum Bestimmen des OS ( dwMajorVersion, dwMinorVersion, wProductType) erhält man aus dem Mekka der WinAPI Programmierung: MSDN.
Hier mal der Link zu den Strukturen:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Wenn du die Links verfolgst, findest du eben auch eine Tabelle vor, die die genauen Werte für die Bestimmung des OS enthält.
Joa und das wärs auch schon. Hier noch mal ein kleiner Beispielcode für die Verwendung der Funktion:
Code:
enum
{
WIN_2000 = 0, WIN_XP, WIN_VISTA, WIN_7
};
Im folgenden habe ich kurz eine Funktion geschrieben, die das OS gemäß unserer Enumeration als Integer-Wert zurückgibt:
Code:
int GetWinVersion()
{
OSVERSIONINFO info;
OSVERSIONINFOEX ex;
ZeroMemory( &info, sizeof( OSVERSIONINFO ) );
ZeroMemory( &ex, sizeof( OSVERSIONINFOEX ) );
info.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
ex.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX );
GetVersionEx( &info );
GetVersionEx( ( OSVERSIONINFO * ) &ex );
if( info.dwMajorVersion == 5 && info.dwMinorVersion == 0 )
return WIN_2000;
if( info.dwMajorVersion == 5 && info.dwMinorVersion == 1 )
return WIN_XP;
if( info.dwMajorVersion == 6 && info.dwMinorVersion == 0 && ex.wProductType == VER_NT_WORKSTATION )
return WIN_VISTA;
if( info.dwMajorVersion == 6 && info.dwMinorVersion == 1 && ex.wProductType == VER_NT_WORKSTATION )
return WIN_7;
return -1;
}
Hier mal der Link zu den Strukturen:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Wenn du die Links verfolgst, findest du eben auch eine Tabelle vor, die die genauen Werte für die Bestimmung des OS enthält.
Joa und das wärs auch schon. Hier noch mal ein kleiner Beispielcode für die Verwendung der Funktion:
Code:
#include <iostream>
#include <windows.h>
using namespace std;
enum
{
WIN_2000 = 0, WIN_XP, WIN_VISTA, WIN_7
};
int GetWinVersion();
int main()
{
int ver = GetWinVersion();
switch( ver )
{
case -1:
cout << "Unbekannte Win Version...\n";
break;
case WIN_2000:
cout << "Du hast Win2000\n";
break;
case WIN_XP:
cout << "Du hast WinXP\n";
break;
case WIN_VISTA:
cout << "Du hast WinVISTA\n";
break;
case WIN_7:
cout << "Du hast Win7\n";
break;
}
cin.get();
return 0;
}
int GetWinVersion()
{
OSVERSIONINFO info;
OSVERSIONINFOEX ex;
ZeroMemory( &info, sizeof( OSVERSIONINFO ) );
ZeroMemory( &ex, sizeof( OSVERSIONINFOEX ) );
info.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
ex.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX );
GetVersionEx( &info );
GetVersionEx( ( OSVERSIONINFO * ) &ex );
if( info.dwMajorVersion == 5 && info.dwMinorVersion == 0 )
return WIN_2000;
if( info.dwMajorVersion == 5 && info.dwMinorVersion == 1 )
return WIN_XP;
if( info.dwMajorVersion == 6 && info.dwMinorVersion == 0 && ex.wProductType == VER_NT_WORKSTATION )
return WIN_VISTA;
if( info.dwMajorVersion == 6 && info.dwMinorVersion == 1 && ex.wProductType == VER_NT_WORKSTATION )
return WIN_7;
return -1;
}