Detecting Windows Version?

BlitzPlus Forums/BlitzPlus Programming/Detecting Windows Version?

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Here is more Windows information. It's essentially the same as Soja's with more fruity bits:


BTW Shane, love your WinXP tips!


; Operating System Information

; userlibs
; ******************************
; .lib "Kernel32.dll"
; GetSystemInfo%(infoPTR*):"GetSystemInfo"
; GetVersionEx%(versioninfoPTR*):"GetVersionExA"
; ******************************

Const PROCESSOR_ARCHITECTURE_ALPHA = 2
Const PROCESSOR_ARCHITECTURE_INTEL = 0
Const PROCESSOR_ARCHITECTURE_MIPS = 1
Const PROCESSOR_ARCHITECTURE_PPC = 3
Const PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF
Const PROCESSOR_INTEL_386 = 386
Const PROCESSOR_INTEL_486 = 486
Const PROCESSOR_INTEL_PENTIUM = 586
Const PROCESSOR_INTEL_PENTIUM2 = 686
Const PROCESSOR_INTEL_PENTIUM3 = 786
Const PROCESSOR_MIPS_R4000 = 4000
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1

Type SYSinfoType
    Field wProcessorArchitecture%
    Field wReserved%
    Field dwPageSize%
    Field lpMinimumApplicationAddress%
    Field lpMaximumApplicationAddress%
    Field dwActiveProcessorMask%
    Field dwNumberOfProcessors%
    Field dwProcessorType%
    Field dwAllocationGranularity%
    Field wProcessorLevel%
    Field wProcessorRevision%
End Type
sys.SYSinfoType=New SYSinfoType

Type OSinfoType
    Field OSVersionInfoSize%
    Field MajorVersion%
    Field MinorVersion%
    Field BuildNumber%
    Field PlatformId%
    Field CSDVersion$ ; 128 in length
End Type
os.OSinfoType=New OSinfoType
os\OSVersionInfoSize=128+20

GetVersionEx(os.OSinfoType)
GetSystemInfo(sys.SYSinfoType)
rev=sys\wProcessorRevision

; TEMP
Print "processer architech "+sys\wProcessorArchitecture%
Print "reserved            "+sys\wReserved%
Print "pagesize            "+sys\dwPageSize%
Print "min app addr        "+sys\lpMinimumApplicationAddress%
Print "max app addr        "+sys\lpMaximumApplicationAddress%
Print "processor mask      "+sys\dwActiveProcessorMask%
Print "num processors      "+sys\dwNumberOfProcessors%
Print "processor type      "+sys\dwProcessorType%
Print "allocg              "+sys\dwAllocationGranularity%
Print "processor level     "+sys\wProcessorLevel%
Print "processor revision  "+sys\wProcessorRevision%
Print ""

; operating system information
osname$="?"
Select os\PlatformId
	Case 0 : osname$="Windows 32s "
	Case VER_PLATFORM_WIN32_WINDOWS
		osname$="Windows 95"
		If os\MinorVersion>=10 osname$="Windows 98"
	Case VER_PLATFORM_WIN32_NT
		osname$="Windows NT "
End Select

Print "Operating System: "+osname$
Print "         Version: "+ Str$(os\MajorVersion)+"."+Str$(os\MinorVersion)
Print "           Build: "+Str$(os\BuildNumber)
Print "     CSD Version: "+os\CSDVersion

; system processor details
Select sys\wProcessorArchitecture
	Case PROCESSOR_ARCHITECTURE_INTEL ; Intel
	Select os\PlatformId
		Case VER_PLATFORM_WIN32_NT
	    Select sys\wProcessorLevel
    		Case 3
            procname$="Intel 80386"
			If (rev And $FF00) = $FF00
				procname$=procname$ + " Model " + Str$(((rev And $F0)/$F)-10) + " Stepping " + Str$((rev And $F))
			Else
				procname$=procname$ + " Stepping " + Chr$(Asc("A") + Str$((rev And $FF)/$FF)) + " Stepping " + Str$((rev And $FF))
			End If
            Case 4
			procname$="Intel 80486"
			If (rev And $FF00) = $FF00
				procname$=procname$ + " Model " + Str$(((rev And $F0) / $F) - 10) + " Stepping " + Str$((rev And $F))
			Else
				procname$=procname$ + " Stepping " + Chr$(Asc("A")) + Str$((rev And $FF)/$FF) + " Stepping " + Str$(rev And $FF)
			End If
			Case 5
			procname$ = "Pentium Model " + Str$((rev And $FF00)/$FF) + " Stepping " + Str$((rev And $FF))
			Case 6
			procname$ = "Pentium II Model " + Str$ ((rev And $FF00)/$FF) + " Stepping " + Str$((rev And $FF))
			Case 7
			procname$ = "Pentium III Model " + Str$ ((rev And $FF00)/$FF) + " Stepping " + Str$((rev And $FF))
		End Select
        Case VER_PLATFORM_WIN32_WINDOWS
		Select sys\dwProcessorType
			Case PROCESSOR_INTEL_386 : procname$ = "Intel 80386"
			Case PROCESSOR_INTEL_486 : procname$ = "Intel 80486"
			Case PROCESSOR_INTEL_PENTIUM : procname$ = "Pentium"
			Case PROCESSOR_INTEL_PENTIUM2 :	procname$ = "Pentium II"
			Case PROCESSOR_INTEL_PENTIUM3 :	procname$ = "Pentium III"
		End Select
	End Select
	; MIPS Architecture (only For WinNT)
	Case PROCESSOR_ARCHITECTURE_MIPS
	procname$ = "MIPS R" + sys\wProcessorLevel + "000"
    ; ALPHA Architecture (only For WinNT)
	Case PROCESSOR_ARCHITECTURE_ALPHA
    procname$ = "Alpha " + sys\wProcessorLevel + " Model A" + Str$((rev And $FF00)/$FF) + " Pass " + Str$((rev And $FF))
	; PPC Architecture (only For WinNT)
	Case PROCESSOR_ARCHITECTURE_PPC
	Select sys\wProcessorLevel
		Case 1, 3, 4, 20
		procname$ = "PPC 6" + Right$(String$("0",16)+Str$(sys\wProcessorLevel),2)
		Case 6
		procname$ = "PPC 603+"
		Case 9
		procname$ = "PPC 604+"
	End Select
	procname$ = procname$ + " Processor Version " + Str$((rev And $FF00)/$FF) + "." + Str$((rev And $FF))
End Select

Print procname$

Print " ----------------------------------"
a$=Input$("Press RETURN to end ...")
End