Frage zu GetVersionEx
-
Ok bevor man die Funktion GetVersionEx aufruft, muß man die Größe der Struktur festlegen das geschieht mit sizeof(OSVERSIONINFO) oder sizeof(OSVERSIONINFOEX) (für Windows NT 5.0 and later). Das verwirrt mich jetzt etwas, ich kenne ja meine Windowsversion nicht, deshalb rufe ich ja auch GetVersionEx. Wie soll ich dann im Vorfeld festlegen können, ob ich OSVERSIONINFO oder OSVERSIONINFOEX in sizeof(..) einsetzen muß?
-
Werte die Rückgabewerte aus!
Ich machs im Prinzip so:
Zuerst Abfrage GetVersionEx() mit Struktur OSVERSIONINFOEX.
Wenn erfolgreich -> fertig!
Wenn Fehler -> Abfrage GetVersionEx() mit Struktur OSVERSIONINFO.
Wenn erfolgreich -> fertig!
Wenn Fehler -> Abfrage GetVersion() -> fertig!OSVERSIONINFOEX s_osvi; s_osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX ); //Strukturlänge definieren. if ( GetVersionEx( (OSVERSIONINFO*)&s_osvi ) != 0 ) { //Abfrage GetVersionEx() mit Struktur OSVERSIONINFOEX war erfolgreich! } else { s_osvi.wServicePackMajor = 0; s_osvi.wServicePackMinor = 0; s_osvi.wSuiteMask = 0; s_osvi.wProductType = 0; s_osvi.wReserved = 0; //Abfrage GetVersionEx() mit Struktur OSVERSIONINFOEX war erfolglos, jetzt neuer Versuch mit Struktur OSVERSIONINFO. s_osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); //Strukturlänge definieren. if ( GetVersionEx( (OSVERSIONINFO*)&s_osvi ) != 0 ) { //Abfrage GetVersionEx() mit Struktur OSVERSIONINFO war erfolgreich! } else { //Abfrage GetVersionEx() war erfolglos! //Die Struktur mit Informationen aus GetVersion() auffüllen. dwVersion = GetVersion(); //Funktioniert auf allen Win-Plattformen! s_osvi.dwOSVersionInfoSize = 0; s_osvi.dwMajorVersion = dwVersion & 0x000000FF; s_osvi.dwMinorVersion = ( dwVersion >> 8 ) & 0x000000FF; s_osvi.szCSDVersion[0] = TEXT( '\0' ); //Es gibt keinen Zusatzstring. if ( ( dwVersion & 0x80000000 ) == 0 ) { s_osvi.dwPlatformId = VER_PLATFORM_WIN32_NT; s_osvi.dwBuildNumber = ( dwVersion >> 16 ) & 0x0000FFFF; } else { if ( s_osvi.dwMajorVersion <= 3 ) { s_osvi.dwPlatformId = VER_PLATFORM_WIN32s; s_osvi.dwBuildNumber = ( dwVersion >> 16 ) & 0x00007FFF; } else { s_osvi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; s_osvi.dwBuildNumber = 0; } } } } //In der Struktur s_osvi hast Du alle verfügbaren Informationen. //Fehlende Informationen wurden mit 0 oder NULL aufgefüllt.ich denke mal, der Code ist so selbsterklärend...
HTH,
Martin
-
Danke Mann, eine ähnliche Vorgehensweise hatte ich auch schon im Hinterkopf.