Windows-Versionsinformationen unter Visual Basic ermitteln
Veröffentlicht: 03. Apr 2002 | Aktualisiert: 21. Jun 2004
Von Mathias Schiffer
So finden Sie heraus, auf welcher Windows-Version Ihre Anwendung beim Endanwender läuft.
Viele API-Funktionen und andere Funktionen können nur unter bestimmten Windows-Versionen verwendet werden.
In der Dokumentation des Platform SDK
ist für API-Funktionen beschrieben, welche Anforderungen sie an die Windows-Version stellt.Für Sie bedeutet das konkret, dass Sie solche Funktionen nur dann aufrufen sollten, wenn Ihre Anwendung auf einer entsprechenden Windows-Version läuft. Für andere Windows-Versionen müssen Sie sich bei Bedarf nach alternativen Möglichkeiten umsehen, um die gewünschte Funktionalität zu erreichen.
Ihre Anwendung kann über die Windows-API-Funktion GetVersionEx
die Windows-Version herausfinden. Sie füllt die übergebene OSVERSIONINFO-Struktur mit versionsspezifischen Informationen:
' Werte für dwPlatformId von OSVERSIONINFO Private Const VER_PLATFORM_WIN32s As Long = 0& Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1& Private Const VER_PLATFORM_WIN32_NT As Long = 2& Private Type OSVERSIONINFO dwOSVersionInfoSize As Long ' Größe der Struktur dwMajorVersion As Long ' Major-Versionsnummer dwMinorVersion As Long ' Minor-Versionsnummer dwBuildNumber As Long ' Build-Versionsnummer dwPlatformId As Long ' Plattform-Kennzeichner szCSDVersion As String * 128 ' Service Pack (Klartext) End Type ' Abrufen der Windows-Versionsinformationen: Private Declare Function GetVersionEx _ Lib "kernel32" Alias "GetVersionExA" ( _ ByRef VersionInformation As OSVERSIONINFO _ ) As Long
Vor dem Aufruf der Funktion GetVersionEx müssen Sie im Parameter dwOSVersionInfoSize der OSVERSIONINFO-Struktur angeben, wie groß die Struktur ist – dies erreichen Sie über die Funktion Len:
Dim OSVI As OSVERSIONINFO Dim lSuccess As Long ' Größe der OSVERSIONINFO-Struktur angeben OSVI.dwOSVersionInfoSize = Len(OSVI) ' Abruf der Windows-Versionsinformationen lSuccess = GetVersionEx(OSVI)
War der Abruf der Versionsinformationen erfolgreich, liefert GetVersionEx einen Wert ungleich 0 zurück.
Die nun in die Struktur OSVERSIONINFO übergebenen Daten ermöglichen Ihnen die Identifizierung der Windows-Version: Die Parameter dwMajorVersion, dwMinorVersion und dwBuildNumber sind selbsterklärend – sie enthalten die Windows-Versionsnummer. Allerdings wird kaum jemand Windows XP unter dem Namen
"Windows 5.1" kennen: Die folgende Tabelle ordnet die verschiedenen Versionsnummern den geläufigeren Produktnamen zu:
OS |
Win95 |
Win98 |
WinME |
WinNT3.51 |
WinNT 4.0 |
Win2000 |
WinXP |
---|---|---|---|---|---|---|---|
dwPlatformID |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
dwMajorVersion |
4 |
4 |
4 |
3 |
4 |
5 |
5 |
dwMinorVersion |
0 |
10 |
90 |
51 |
0 |
0 |
1 |
In dieser Tabelle enthalten sind auch die Werte für den Parameter dwPlatformID: Er kennzeichnet die Basis-Technologie einer Windows-Version. Mögliche Werte sind hier VER_PLATFORM_WIN32s (Win32s-Erweiterungen für Windows 3.x), VER_PLATFORM_WIN32_WINDOWS (auf MS-DOS aufsetzende Windows-Versionen) sowie VER_PLATFORM_WIN32_NT (Windows NT, 2000 und XP).
Letztlich findet sich im Parameter szCSDVersion ggf. eine Klartextbeschreibung des installierten Service-Packs, beispielsweise
"Service Pack 2".
Mit diesen Informationen gerüstet können wir eine einfache Fallunterscheidung vornehmen, um die eingesetzte Windows-Version zu erkennen:
Private Function GetWindowsVersion() As String Dim OSVI As OSVERSIONINFO Dim lSuccess As Long ' Größe der OSVERSIONINFO-Struktur angeben OSVI.dwOSVersionInfoSize = Len(OSVI) ' Abruf der Windows-Versionsinformationen lSuccess = GetVersionEx(OSVI) ' Erfolgreiche Abarbeitung überprüfen If lSuccess = 0 Then Exit Function End If ' Auswertung der Versionsnummern: Select Case OSVI.dwPlatformId ' Plattform-Kennzeichner Case VER_PLATFORM_WIN32s ' Win32s-Erweiterung GetWindowsVersion = "Win32s für Windows 3.x" Case VER_PLATFORM_WIN32_WINDOWS ' Windows 9x/Me Select Case OSVI.dwMinorVersion Case 0 GetWindowsVersion = "Windows 95" Case 10 GetWindowsVersion = "Windows 98" Case 90 GetWindowsVersion = "Windows Me" End Select Case VER_PLATFORM_WIN32_NT ' Windows NT/2000/XP Select Case OSVI.dwMajorVersion Case 3 GetWindowsVersion = "Windows NT 3." & CStr(OSVI.dwMinorVersion) Case 4 GetWindowsVersion = "Windows NT 4.0" Case 5 Select Case OSVI.dwMinorVersion Case 0 GetWindowsVersion = "Windows 2000" Case 1 GetWindowsVersion = "Windows XP" End Select Case Else ' zukünftige Versionen von Windows NT GetWindowsVersion = "Windows NT / Folgeversion" End Select End Select End Function