ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 09.07.2001

Diese Seite wurde zuletzt aktualisiert am 09.07.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Versions-Salat entziffern

Zurück...


Anzeige

(-hg) mailto:hg_versioninfo@aboutvb.de

Auf den ersten Blick ziemlich undurchsichtig sind die Informationen, die Ihnen die API-Funktion MSDN-Library - API GetVersionExGetVersionEx über das installierte Betriebssystem liefert. Womöglich kann selbst bei Microsoft niemand mehr so richtig nachvollziehen, warum sich sowohl alle Windows 9x-Versionen als auch NT 4.0 als Hauptversion 4 zu erkennen geben. Wahrscheinlich rührt das aus dem ursprünglich für einen viel früheren Zeitpunkt geplanten Zusammenwachsen der Betriebssysteme auf der Basis eines gemeinsamen Kerns. Dieses Vorhaben wird schließlich erst mit dem kommenden Windows XP endgültig umgesetzt.

Etwas verworren, aber letztlich doch eindeutig - die Informationen der API-Funktion GetVersionEx

Etwas verworren, aber letztlich doch eindeutig - die Informationen der API-Funktion GetVersionEx

Aus der Kombination der Hauptversion (Major) und der Unterversion (Minor) mit der Plattform-Kennung (PlatformId - 32s, 9x oder NT) ergibt sich die tatsächliche Betriebssystem-Version.

Im Prinzip reicht es, von der API-Funktion GetVersionEx die benutzerdefinierte Variable OSVERSIONINFO füllen zu lassen. Sie umfasst bereits alle zur Bestimmung des Betriebssystems notwendigen Informationen. Ein wenig mehr können allerdings die neueren Windows-Versionen über sich erzählen: Windows 2000 und Windows XP - und auch schon Windows NT 4.0 ab ServicePack 6. Die um die erweiterten Informationen größere benutzerdefinierte Variable OSVERSIONINFOEX kann auch erst unter diesen Versionen an GetVersionEx übergeben werden. Und gerade sie bietet erst eine systematischere Unterscheidung der ServicePack-Stufe, sogar wiederum mit einer getrennten Kennung Haupt- und Unterversion, wie Sie sie eigentlich schon unter NT 4.0 brauchen könnten, um das Vorhandensein des ServicePack 6 feststellen zu können.

Eine etwas vage anmutende Information können Sie dazu jedoch auch schon über OSVERSIONINFO in Erfahrung bringen. Im Element szCSDVersion (einem String der festen Länge 128) werden nämlich Zusatzinformationen geliefert - unter Windows 9x eine Kennung für die Release-Version (OSR, Second Edition usw.) und unter NT/2000 die ServicePack-Stufe im Klartext. Zumindest unter NT 4.0 können sich Sie sich wohl darauf verlassen, dass die Nummer des ServicePacks mit dem 14. Zeichen beginnt.

Wir haben für Sie die Auswertung der Einzelinformationen in ein Standard-Modul gepackt. Sie initialisieren es einmal mit dem Aufruf der Prozedur ReadVersionInfo, in der mittels GetVersionEx die Informationen einmal eingelesen werden. Über eine ganze Reihe von Eigenschaften können Sie nun die Details auslesen. Zum einen entspricht jeweils eine Eigenschaft einem jeden Element von OSVERSIONINFOEX. Für den Fall, dass GetVersionEx jedoch nicht damit aufgerufen werden konnte, sondern lediglich mit OSVERSIONINFO, wird deren Inhalt einer modulweit gültigen Variablen des Typs OSVERSIONINFOEX per LSet zugewiesen. Zum anderen bietet das Modul eine direkte Möglichkeit, die Windows-Version als enumerierten Wert aus der Eigenschaft WinVersion auszulesen, als auch als Klartext aus der Eigenschaft WinVersionText. Schließlich können Sie noch über separate Eigenschaften für jede Betriebssystem-Version erfragen, ob die jeweilige Version installiert ist.

Private Declare Function GetVersionEx Lib "kernel32" _
 Alias "GetVersionExA" (lpVersionInformation As Any) 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 Type OSVERSIONINFOEX
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
  wServicePackMajor As Integer
  wServicePackMinor As Integer
  wSuiteMask As Integer
  wProductType As Byte
  wReserved As Byte
End Type

Private mVersionInfoEx As OSVERSIONINFOEX

Public Enum viMajorConstants
  viMajorWindowsNT351 = 3
  viMajorWindows9x_NT4 = 4
  viMajorWindows2000_XP = 5
End Enum

Public Enum viMinorConstants
  viMinorWindows95_NT4_2000 = 0
  viMinorXP = 1
  viMinorWindows98 = 10
  viMinorWindowsNT351 = 51
  viMinorWindowsMe = 90
End Enum

Public Enum viPlatformIdConstants
  viPlatformWIN32s = 0
  viPlatformWIN32_9x = 1
  viPlatformWIN32_NT = 2
End Enum

Public Enum viProductTypeConstants
  viPTWorkstation = 1
  viPTDomainController = 2
  viPTServer = 3
End Enum

Public Enum viSuiteMaskConstants
  viSMSmallBusiness = &H1
  viSMEnterprise = &H2
  viSMBackOffice = &H4
  viSMCommunications = &H8
  viSMTerminal = &H10
  viSMSmallBusinessRestricted = &H20
  viSMEmbeddedNT = &H40
  viSMDataCenter = &H80
End Enum

Public Enum viWinVersionConstants
  viWinUnknown = 0
  viWin95 = 1
  viWin98 = 2
  viWinME = 3
  viWinNT351 = 4
  viWinNT4 = 5
  viWin2000 = 6
  viWinXP = 7
End Enum

Private pCSDVersion As String

Public Property Get BuildNumber() As Long
  BuildNumber = mVersionInfoEx.dwBuildNumber
End Property

Public Property Get CSDVersion() As String
  CSDVersion = pCSDVersion
End Property

Public Property Get Major() As viMajorConstants
  Major = mVersionInfoEx.dwMajorVersion
End Property

Public Property Get Minor() As viMinorConstants
  Minor = mVersionInfoEx.dwMinorVersion
End Property

Public Property Get PlatformId() As Long
  PlatformId = mVersionInfoEx.dwPlatformId
End Property

Public Property Get ProductType() As Byte
  ProductType = mVersionInfoEx.wProductType
End Property

Public Property Get SPMajor() As Integer
  SPMajor = mVersionInfoEx.wServicePackMajor
End Property

Public Property Get SPMinor() As Integer
  SPMinor = mVersionInfoEx.wServicePackMinor
End Property

Public Property Get SuiteMask() As Integer
  SuiteMask = mVersionInfoEx.wSuiteMask
End Property

Public Property Get Win95() As Boolean
  With mVersionInfoEx
    Win95 = (.dwMajorVersion = viMajorWindows9x_NT4) _
     And (.dwMinorVersion = viMinorWindows95_NT4_2000) _
     And (.dwPlatformId = viPlatformWIN32_9x)
  End With
End Property

Public Property Get Win98() As Boolean
  With mVersionInfoEx
    Win98 = (.dwMajorVersion = viMajorWindows9x_NT4) _
     And (.dwMinorVersion = viMinorWindows98) _
     And (.dwPlatformId = viPlatformWIN32_9x)
  End With
End Property

Public Property Get WinME() As Boolean
  With mVersionInfoEx
    WinME = (.dwMajorVersion = viMajorWindows9x_NT4) _
     And (.dwMinorVersion = viMinorWindowsMe) _
     And (.dwPlatformId = viPlatformWIN32_9x)
  End With
End Property

Public Property Get WinNT351() As Boolean
  With mVersionInfoEx
    WinNT351 = (.dwMajorVersion = viMajorWindowsNT351) _
     And (.dwMinorVersion = viMinorWindowsNT351) _
     And (.dwPlatformId = viPlatformWIN32_NT)
  End With
End Property

Public Property Get WinNT4() As Boolean
  With mVersionInfoEx
    WinNT4 = (.dwMajorVersion = viMajorWindows9x_NT4) _
     And (.dwMinorVersion = viMinorWindows95_NT4_2000) _
     And (.dwPlatformId = viPlatformWIN32_NT)
  End With
End Property

Public Property Get Win2000() As Boolean
  With mVersionInfoEx
    Win2000 = (.dwMajorVersion = viMajorWindows2000_XP) _
     And (.dwMinorVersion = viMinorWindows95_NT4_2000) _
     And (.dwPlatformId = viPlatformWIN32_NT)
  End With
End Property

Public Property Get WinXP() As Boolean
  With mVersionInfoEx
    WinXP = (.dwMajorVersion = viMajorWindows2000_XP) _
     And (.dwMinorVersion = viMinorXP) _
     And (.dwPlatformId = viPlatformWIN32_NT)
  End With
End Property

Public Property Get WinVersion() As viWinVersionConstants
  Select Case True
    Case Win95
      WinVersion = viWin95
    Case Win98
      WinVersion = viWin98
    Case WinME
      WinVersion = viWinME
    Case WinNT351
      WinVersion = viWinNT351
    Case WinNT4
      WinVersion = viWinNT4
    Case Win2000
      WinVersion = viWin2000
    Case WinXP
      WinVersion = viWinXP
  End Select
End Property

Public Property Get WinVersionText() As String
  Select Case True
    Case Win95
      WinVersionText = "Windows 95 (" & pCSDVersion & ")"
    Case Win98
      WinVersionText = "Windows 98 (" & pCSDVersion & ")"
    Case WinME
      WinVersionText = "Windows ME (" & pCSDVersion & ")"
    Case WinNT351
      WinVersionText = "Windows NT 3.51 (" & pCSDVersion & ")"
    Case WinNT4
      WinVersionText = "Windows NT 4.0 (" & pCSDVersion & ")"
    Case Win2000
      WinVersionText = "Windows 2000 (" & pCSDVersion & ")"
    Case WinXP
      WinVersionText = "Windows XP (" & pCSDVersion & ")"
  End Select
End Property

Public Sub ReadVersionInfo()
  Dim nVersionInfo As OSVERSIONINFO
  Dim nPos As Long

  With nVersionInfo
    .dwOSVersionInfoSize = Len(nVersionInfo)
    GetVersionEx nVersionInfo
    nPos = InStr(.szCSDVersion, Chr$(0))
    If nPos Then
      pCSDVersion = Trim$(Left$(.szCSDVersion, nPos - 1))
    Else
      pCSDVersion = Trim$(.szCSDVersion)
    End If
    If (.dwPlatformId = viPlatformWIN32_NT) _
     And (.dwMajorVersion = viMajorWindows2000_XP) Then
    ElseIf (.dwPlatformId = viPlatformWIN32_NT) _
     And (.dwMajorVersion = viMajorWindows9x_NT4) _
     And (CLng(Mid$(pCSDVersion, 14)) > 5) Then
    Else
      LSet mVersionInfoEx = nVersionInfo
      Exit Sub
    End If
  End With
  mVersionInfoEx.dwOSVersionInfoSize = Len(mVersionInfoEx)
  GetVersionEx mVersionInfoEx
End Sub

Beispiel-Projekt und Modul modVersionInfo (versioninfo.zip - ca. 4,9 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer