Windows-Version bestimmen

Ich ben÷tige fⁿr einige VB-Applikationen und VBA-Funktionen die Angabe ⁿber das Betriebssystem, um betriebssystemspezifische Aktionen durchzufⁿhren. Das ging bisher auch mit Hilfe der Funktion GetVersionEx recht problemlos. Seit Windows 98 kann ich jedoch die beiden Windows-Versionen 95 und 98 nicht mehr auseinanderhalten. Gibt es eine neue Funktion, mit der sich dieses Problem l÷sen lΣ▀t?

Eine neue Funktion k÷nnte Ihnen nicht viel nⁿtzen, da sie in den alten Systemen sicherlich nicht verfⁿgbar wΣre. Sie k÷nnen aber die Funktion GetVersionEx nach wie vor verwenden. Sie mⁿssen nur die Rⁿckgabewerte etwas genauer untersuchen. Die Funktion gibt nicht nur Informationen ⁿber die Plattform zurⁿck, sie liefert auch Informationen ⁿber die Haupt- und Nebenversionen. In den Nebenversionen unterscheiden sich die Rⁿckgabewerte fⁿr Windows 95 und 98: 95 liefert eine 0, 98 eine 10 als Rⁿckgabewert. Um dies zu prⁿfen, geben Sie die Anweisungen aus dem Kasten unten entweder in den Public-Bereich eines VBA-Moduls oder in ein eigenes Modul ein. Au▀erdem finden Sie das komplette Listing auf der Heft-CD. WIN-CODE: VERSION ZunΣchst ist im Deklarationsbereich die Funktion aus der Funktionsbibliothek Kernel32 einzubinden. Dies erledigen Sie mit der Anweisung Declare. Die Funktion erzeugt einen Zeiger auf eine Datenstruktur, in der sie Informationen ⁿber das Betriebssystem ablegt. Diese Datenstruktur schaffen Sie mit Hilfe der Type-Anweisung. Nach dem Aufruf von GetVersionEx mit einer Variablen von diesem Datentyp als Parameter k÷nnen Sie die Rⁿckgabewerte der Funktion bequem ⁿber die Variable ansprechen. Was die jeweiligen Attribute enthalten, ergibt sich schon aus ihrem Namen. dwOSVersionInfoSize dient der Spezifikation der Gr÷▀e des Datentyps OsVersionInfo in Bytes. szCSDVersion ben÷tigen Sie, um einen nullterminierten String mit zusΣtzlichen Versionsinformationen aufzunehmen. Zu Beginn der Auswertung sind zunΣchst die dafⁿr ben÷tigten Datentypen zu spezifizieren: OsVersionInfo und RetValue. Mit letzterem prⁿfen Sie, ob der Aufruf von GetVersionEx erfolgreich war. Ist das der Fall, gibt die Funktion den Wert TRUE (wahr), andernfalls FALSE (falsch) zurⁿck. Anschlie▀end sind noch die Parameter fⁿr die Gr÷▀e von OsVersionInfo und szCSDVersion fⁿr die ▄bernahme des nullterminierten Strings vorzubereiten. Die im Beispiel verwendeten Angaben stellen ein korrektes Verhalten sicher. Nach dem Aufruf von GetVersionEx stehen alle ben÷tigten Angaben bereit. Die ▄berprⁿfung der Angaben mit Hilfe einer Case-Struktur und darin verschachtelter If-Anweisungen ist nun sicherlich kein Problem mehr.

Listing: Windows-Version prⁿfen
Public Declare Function GetVersionExA Lib ôkernel32ô  (lpVersionInformation As OSVERSIONINFO) As Integer╢

Public Type OSVERSIONINFO╢
	dwOSVersionInfoSize As Long╢
	dwMajorVersion As Long╢
	dwMinorVersion As Long╢
	dwBuildNumber As Long╢
	dwPlatformId As Long╢
	szCSDVersion As String * 128╢
End Type╢

Public Function getVersion () As String╢
Dim osinfo As OSVERSIONINFO╢
Dim retvalue As Integer╢

osinfo.dwOSVersionInfoSize = 148╢
osinfo.szCSDVersion = Space$(128)╢
retvalue = GetVersionExA (osinfo)╢

With osinfo╢
	Select Case .dwPlatformId╢
	Case 1╢
		If .dwMinorVersion = 0 Then╢
			getVersion = ô OS ist Windows 95ô╢
		ElseIf .dwMinorVersion = 10 Then╢
			getVersion = ô OS ist Windows 98ô╢
		End If╢
	Case 2╢
		If .dwMajorVersion = 3 Then╢
			getVersion = ô OS ist Windows NT 3.51ô╢
		ElseIf .dwMajorVersion = 4 Then╢
			getVersion = ô OS ist Windows NT 4.0ô╢
		End If╢
	Case Else╢
		getVersion = ôFailedô╢
	End Select╢
End With╢
End Function╢

Public Function DisplayInfo ()╢
	MsgBox getVersion ()╢
End Function╢