Betriebssystem erkennen
Auch in Zeiten der Kompatibilität gibt es einige Inkompatibilitäten zwischen den Microsoft-Betriebssystemen.
Das kann zu großen Hängern im Programm führen, vor allem dann, wenn es sich um Programme handelt, die viel mit der Registry machen, oder solche, die am Dateisystem etwas herumspielen. Auch bei der Grafikausgabe gibt es viele unterschiede zwischen NT und 95/98.
Mit Windows2000 und WindowsXP(2002) kommen noch zwei dazu, welche ja bekanntermaßen alle Vorteile von NT und 98 zusammengepackt in einem sind. Das wirkt sich in vielen neuen API-Funktionen aus, die man unter Win9x lieber nicht verwenden sollte (allein der Versuch ist strafbar*g*).
Mit Hilfe einer kleinen API-Funktion bekommt man eigentlich alles, was für das Betriebssystem wichtig ist...Angefangen von der Versionsnummer bis hin zum installierten Service Pack..
Deklaration:Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32s = 0
Um die angeforderten Informationen nun auszuwerten braucht es noch einiger Informationen. So erhält man mit der PlatformID nicht etwa direkt das Betriebssystem(außer NT) sondern einen Hinweiß auf dieses. Bei Windows 95/98 muß danach noch die Versionsnummer untersucht werden. So ist Windows 98 immer mit einer x.10 gesegnet.
Im Array .szCSDVersion aus der OSVERSIONINFO-Struktur stehen dann solche Sachen wie die Version des ServicePacks. Das Array ist mit Chr(0) getrennt und wird hier mit der Funktion Split() auseinandergenommen. Diese Funktion ist aber erst seit Version 6 von VB verfügbar (ist aber kein Grund für mich darauf zu verzichten...).
Wenn man die Funktion auch unter VB5 bzw. 4 haben will, dann sollte man sich das Modul "VB6 Modul" unter Tools mal anschauen.
Dim OSinfo As OSVERSIONINFO, CSDArray() As String, CSD As String, tmp
OSinfo.dwOSVersionInfoSize = Len(OSinfo)
GetVersionEx OSinfo
With OSinfo
Select Case .dwPlatformId
Case VER_PLATFORM_WIN32s
OS = "Windows 16bit mit 32bit-Erweiterung"
Case VER_PLATFORM_WIN32_WINDOWS
OS = "Windows"
Select Case .dwMinorVersion
Case 0
OS = OS & " 95"
Case 10
OS = OS & " 98"
Case 90
OS = OS & " ME"
Case Else
OS = OS & " (unbekannt)"
End Select
Case VER_PLATFORM_WIN32_NT
OS = "Windows NT"
If .dwMajorVersion = 5 Then
Select Case .dwMinorVersion
Case 0
OS = OS & "5.0 (Win2000)"
Case 1
OS = OS & "5.1 (WinXP)"
End Select
End If
Case Else
OS = "Betriebssystem unbekannt"
End Select
CSDArray() = Split(.szCSDVersion, Chr(0))
For Each tmp In CSDArray()
If tmp <> "" Then CSD = CSD & tmp & " "
Next
OS = OS & " ( Version " & .dwMajorVersion & "." & .dwMinorVersion & ", " & CSD & ")"
End With
MsgBox OS