Betriebssystem-Informationen
Verfasst: 12.04.2008 20:16
Mitunter braucht man vom Betriebssystem mehr Informationen als "OSVersion" liefert, z.B. das installierte Service-Pack. Hier ein Grundgerüst, das je nach Bedarf erweitert werden kann:
Gruß
Helle
Code: Alles auswählen
;Vorhandenes Windows-Betriebssystem und Zusatz-Informationen ermitteln
;Dieses Beispiel berücksichtigt nur die Win-NT-Versionen (also NT 4.0, 2000, XP, Vista, Server)
;Verwendet wird die API-Funktion GetVersionEx, die Daten werden in der Struktur OSVERSIONINFOEX gespeichert
;- "Helle" Klaus Helbing, 12.04.2008, PB4.10
;------------------------------------------------
;Aufbau von OSVERSIONINFOEX, ist (auch) PB-Struktur
;Structure OSVERSIONINFOEX
; dwOSVersionInfoSize.l
; dwMajorVersion.l
; dwMinorVersion.l
; dwBuildNumber.l
; dwPlatformId.l
; szCSDVersion.c[128]
; wServicePackMajor.w
; wServicePackMinor.w
; wSuiteMask.w
; wProductType.b
; wReserved.b
;EndStructure
;------------------------------------------------
;--------------------------------------------------------------------------------------------------
;Erläuterungen zur Struktur
;MajorVersion:
;3 = Windows NT 3.51
;4 = Windows NT 4.0, Windows 95, Windows 98 oder Windows ME
;5 = Windows Server 2003 R2, Windows Server 2003, Windows XP oder Windows 2000
;6 = Windows Vista oder Windows Server 2008
;--------
;MinorVersion:
;0 = Windows Server 2008, Windows Vista oder Windows 2000
;1 = Windows XP
;2 = Windows Server 2003 R2, Windows Server 2003 oder Windows XP Professional x64 Edition
;--------
;BuildNumber (Auswahl):
; 528 = Windows NT 3.1
; 807 = Windows NT 3.5
; 950 = Windows 95
; 951 = Windows 95A (OSR 1.0)
;1057 = Windows NT 3.51
;1111 = Windows 95B (OSR 2.0)
;1212 = Windows 95B (OSR 2.1)
;1214 = Windows 95C (OSR 2.5)
;1381 = Windows NT 4.0
;1998 = Windows 98 (Final Release)
;2195 = Windows 2000
;2222 = Windows 98 (Second Edition)
;2600 = Windows XP (alt auch 2505)
;3000 = Windows ME
;3790 = Windows XP 64-Bit, Windows Home Server oder Windows Server 2003
;6000 = Windows Vista
;6001 = Windows Server 2008
;--------
;PlatformId:
;0 = VER_PLATFORM_WIN32s
;1 = VER_PLATFORM_WIN32_WINDOWS
;2 = VER_PLATFORM_WIN32_NT
;--------
;CSDVersion:
;Aktuelles Servive-Pack als String (keines = Leerstring)
;--------
;ServicePackMajor:
;Hauptversion des Service-Packs
;--------
;ServicePackMinor:
;Unterversion des Service-Packs
;--------
;SuiteMask:
;Bit-Maske zur Ermittlung von Suites
;$00000001 = VER_SUITE_SMALLBUSINESS = Microsoft Small Business Server war mal installiert, ist aber möglicherweise geupdatet worden
;$00000002 = VER_SUITE_ENTERPRISE = Windows Server 2008 Enterprise, Windows Server 2003 Enterprise Edition oder Windows 2000 Advanced Server ist installiert
;$00000004 = VER_SUITE_BACKOFFICE = Microsoft BackOffice-Komponenten sind installiert
;$00000008 = VER_SUITE_COMMUNICATIONS
;$00000010 = VER_SUITE_TERMINAL = Terminal-Services sind installiert
;$00000020 = VER_SUITE_SMALLBUSINESS_RESTRICTED = Microsoft Small Business Server ist installiert mit einer restriktiven Client-Lizenz
;$00000040 = VER_SUITE_EMBEDDEDNT = Windows XP Embedded ist installiert
;$00000080 = VER_SUITE_DATACENTER = Windows Server 2008 Datacenter, Windows Server 2003 Datacenter Edition oder Windows 2000 Datacenter Server ist installiert
;$00000100 = VER_SUITE_SINGLEUSERTS = Allgemein: Remote-Desktop wird unterstützt, aber nur mit einer interaktiven Session
;$00000200 = VER_SUITE_PERSONAL = Windows Vista Home Premium, Windows Vista Home Basic oder Windows XP Home Edition ist installiert
;$00000400 = VER_SUITE_BLADE = Windows Server 2003 Web Edition ist installiert
;$00000800 = VER_SUITE_EMBEDDED_RESTRICTED
;$00001000 = VER_SUITE_SECURITY_APPLIANCE
;$00002000 = VER_SUITE_STORAGE_SERVER = Windows Storage Server 2003 R2 oder Windows Storage Server 2003 ist installiert
;$00004000 = VER_SUITE_COMPUTE_SERVER = Windows Server 2003 Compute Cluster Edition ist installiert
;$00008000 = VER_SUITE_WH_SERVER = Windows Home Server ist installiert
;--------
;ProductType:
;1 = VER_NT_WORKSTATION = Windows Vista, Windows XP Professional, Windows XP Home Edition oder Windows 2000 Professional
;2 = VER_NT_DOMAIN_CONTROLLER = Windows Server 2008, Windows Server 2003 oder Windows 2000 Server
;3 = VER_NT_SERVER = Windows Server 2008, Windows Server 2003 oder Windows 2000 Server
;--------------------------------------------------------------------------------------------------
#VER_SUITE_ENTERPRISE = $2
#VER_SUITE_EMBEDDEDNT = $40
#VER_SUITE_DATACENTER = $80
#VER_SUITE_PERSONAL = $200
#VER_NT_WORKSTATION = $1
#VER_NT_DOMAIN_CONTROLLER = $2
#VER_NT_SERVER = $3
OSVI.OSVERSIONINFOEX ;ist PB-Struktur, s.o.
OSVI\dwOSVersionInfoSize = SizeOf(OSVERSIONINFOEX) ;erstmal die benötigte Struktur-Größe eingeben
If GetVersionEx_(@OSVI) And OSVI\dwPlatformId = #VER_PLATFORM_WIN32_NT ;Angaben ermitteln
MaV$ = "MajorVersion : " + Str(OSVI\dwMajorVersion) + #LFCR$
MiV$ = "MinorVersion : " + Str(OSVI\dwMinorVersion) + #LFCR$
BNr$ = "BuildNumber : " + Str(OSVI\dwBuildNumber) + #LFCR$
PId$ = "PlatformId : " + Str(OSVI\dwPlatformId) + #LFCR$
SP$ = "SP$ : " + PeekS(@OSVI\szCSDVersion) + #LFCR$
SPMa$ = "SP-MajorVersion : " + Str(OSVI\wServicePackMajor) + #LFCR$
SPMi$ = "SP-MinorVersion : " + Str(OSVI\wServicePackMinor) + #LFCR$
SM$ = "SuiteMask : $" + Hex(OSVI\wSuiteMask) + #LFCR$
PrT$ = "ProductType : " + Str(OSVI\wProductType) + #LFCR$ + #LFCR$
SuiteMask = OSVI\wSuiteMask
Select OSVI\dwMajorVersion
Case 4
OS$ = "Windows NT 4.0 "
Case 5 ;Windows Server 2003 R2, Windows Server 2003, Windows XP oder Windows 2000
Select OSVI\dwMinorVersion
Case 0 ;W2k
OS$ = "Windows 2000 "
Select SuiteMask & (#VER_SUITE_DATACENTER | #VER_SUITE_ENTERPRISE) ;$82
Case #VER_SUITE_ENTERPRISE
OS$ + "Advanced Server "
Case #VER_SUITE_DATACENTER
OS$ + "Datacenter Server "
Default
OS$ + "Professional "
EndSelect
Case 1 ;XP
OS$ = "Windows XP "
Select SuiteMask & (#VER_SUITE_PERSONAL | #VER_SUITE_EMBEDDEDNT) ;$240
Case #VER_SUITE_EMBEDDEDNT
OS$ + "Embedded "
Case #VER_SUITE_PERSONAL
OS$ + "Home Edition "
Default
OS$ + "Professional "
EndSelect
Case 2 ;Windows Server 2003 R2, Windows Server 2003 oder Windows XP Professional x64 Edition
Select OSVI\wProductType
Case #VER_NT_WORKSTATION
OS$ = "Windows XP Professional x64 Edition "
Case #VER_NT_DOMAIN_CONTROLLER, #VER_NT_SERVER
Select GetSystemMetrics_(#SM_SERVERR2)
Case 0
OS$ = "Windows Server 2003 "
Default
OS$ = "Windows Server 2003 R2 "
EndSelect
EndSelect
EndSelect
Case 6 ;Windows Vista oder Windows Server 2008
Select OSVI\wProductType
Case #VER_NT_WORKSTATION
OS$ = "Windows Vista "
Select SuiteMask & #VER_SUITE_PERSONAL
Case #VER_SUITE_PERSONAL
OS$ + "Home "
EndSelect
Case #VER_NT_DOMAIN_CONTROLLER, #VER_NT_SERVER
OS$ = "Windows Server 2008 "
EndSelect
EndSelect
OS$ + PeekS(@OSVI\szCSDVersion) ;Service-Pack anhängen
Result$ = MaV$ + MiV$ + BNr$ + PId$ + SP$ + SPMa$ + SPMi$ + SM$ + PrT$ + OS$
Else
Result$ = "Ermittlung fehlgeschlagen oder keine WIN-32-NT-Version !"
EndIf
MessageRequester("Windows-Betriebssystem", Result$)
Helle