![](/file/23459/chip_04_2004.iso/images/spacing.gif) |
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¶
|
![](/file/23459/chip_04_2004.iso/images/spacing.gif) |