Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
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:
;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$)
Windows XP Professional Service Pack 3, v.3264
---------------------------
OK
---------------------------
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Danke _JON_! Das ist mir als W7-Nutzer glatt entgangen . Schaue ich mir morgen mal in Ruhe an und suche Anfang nächste Woche auf Arbeit einen PC mit 8.1 zum Praxis-Test.
Also, Leute, obiger Code gilt nur für Windows bis einschließlich 8 (nicht für 8.1).
Sorry!
Helle