Windows Version auslesen
-
Cool danke
-
-
Jochen Kalmbach schrieb:
Der Link ist hinne.
bzw. ni in dt...
...:
http://windowssdk.msdn.microsoft.com/de-de/library/ms724429(en-us).aspx
-
oder, leserlich
:
wchar_t* get_windows_version( ) { const wchar_t *version_table[ 8 ] = { L"NT 3.51", L"NT 4.0", L"95", L"98", L"Me", L"2000", L"XP", L"Server 2003" }; const wchar_t *ext_table[ 9 ] = { L"", L" OSR2", L" SE", L" Personal", L" Professional", L" Datacenter Server", L" Advanced Server", L" Server", L" Standard Edition" }; OSVERSIONINFOEX osviex; osviex.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX ); bool extended_info = true; if( !GetVersionEx( reinterpret_cast< OSVERSIONINFO* >( &osviex ) ) ) { osviex.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); extended_info = false; if( !GetVersionEx( reinterpret_cast< OSVERSIONINFO* >( &osviex ) ) ) return 0; } int version_index = -1; switch( osviex.dwMajorVersion ) { case 3: if( osviex.dwMinorVersion == 51 ) version_index = 0; break; case 4: switch( osviex.dwMinorVersion ) { case 0: if( osviex.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) { version_index = 2; } else { version_index = 1; } break; case 10: version_index = 3; break; case 90: version_index = 4; break; } break; case 5: switch( osviex.dwMinorVersion ) { case 0: version_index = 5; break; case 1: version_index = 6; break; case 2: version_index = 7; break; } break; } if( version_index == -1 ) return 0; int ext_index = 0; if( osviex.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) { if ( osviex.szCSDVersion[ 1 ] == 'C' || osviex.szCSDVersion[ 1 ] == 'B' ) { ext_index = 1; } else if( osviex.szCSDVersion[ 1 ] == 'A' ) { ext_index = 2; } } else if( ( osviex.dwPlatformId == VER_PLATFORM_WIN32_NT ) ) { if( extended_info ) { if ( osviex.wProductType == VER_NT_WORKSTATION ) { if( osviex.wSuiteMask & VER_SUITE_PERSONAL ) { ext_index = 3; } else { ext_index = 4; } } else if( osviex.wProductType == VER_NT_SERVER ) { if( osviex.wSuiteMask & VER_SUITE_DATACENTER ) { ext_index = 5; } else if( osviex.wSuiteMask & VER_SUITE_ENTERPRISE ) { ext_index = 6; } else { if( version_index == 7 ) { ext_index = 8; } else { ext_index = 7; } } } } else { HKEY reg_key; char buffer[ 80 ]; unsigned long buffer_size; RegOpenKeyEx( HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\ProductOptions", 0, KEY_QUERY_VALUE, ®_key ); RegQueryValueEx( reg_key, L"ProductType", 0, 0, reinterpret_cast< unsigned char* >( buffer ), &buffer_size ); RegCloseKey( reg_key ); if( lstrcmpiA( buffer, "WINNT" ) == 0 ) { ext_index = 3; } else if( lstrcmpiA( buffer, "LANMANNT" ) == 0 ) { ext_index = 7; } else if( lstrcmpiA( buffer, "SERVERNT" ) == 0 ) { ext_index = 5; } } } wchar_t *version; try { version = new wchar_t[ wcslen( version_table[ version_index ] ) + ( osviex.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ? get_digits( LOWORD( osviex.dwBuildNumber ) ) : get_digits( osviex.dwBuildNumber ) ) + wcslen( ext_table[ ext_index ] ) + 28 ]; } catch( bad_alloc ) { return 0; } wsprintf( version, L"Microsoft Windows %s%s (Build %u)", version_table[ version_index ], ext_table[ ext_index ], ( osviex.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ? LOWORD( osviex.dwBuildNumber ) : osviex.dwBuildNumber ) ); return version; }
Greetz, Swordfish
-
Das basiert auf dem einen Beispiel aus der MSDN oder?
Das war mir für meine (privaten) Zwecke zu aufwändig, hab einfach die Versionstabelle aus der MSDN unter OSVERSIONINFO genommen und bei gleichen Versionen zu Gunsten zum wahrscheinlicheren entschieden und dieser String mit Service Pack Nr oder nem C usw. drangehängt.Reicht für meine Zwecke vollkommen, aber finde es etwas peinlich, dass selbst Microsoft so nen Hack vorlegen muss um das richtige Betriebssystem rauszubekommen.
-
Na, dann hier nochmals der Englische Link:
http://windowssdk.msdn.microsoft.com/en-us/library/ms724429.aspx
-
Und wie kommt man da an die Info welches Windows ServicePack ggf. installiert ist? Ich meine hier besonders Win XP.
-
-
Steht in der OSVERSIONINFO Struktur drin in diesem TCHAR[128]-Array.
-
@thomas r.: Ja, ist ein bisschen davon inspiriert, jedoch IMVVHO einiges eleganter
Greetz, Swordfish