Getting CPU and Graphics Card

Miscellaneous Forums/Win32 Discussion/Getting CPU and Graphics Card

BlitzMax code which gets CPU info and O/S details too
(not sure if everything here is right though):


Strict
Framework brl.standardio
Import brl.retro


Extern "Win32"
	Function GetSystemInfo%(infoPTR:Byte Ptr)
	Function GetVersionExA%(versioninfoPTR:Byte Ptr)
End Extern


Global osname$="O/S unknown"
Global procname$="Processor unknown"




' Operating System Information


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 SystemInfo
	Field wProcessorArchitecture%
	Field wReserved%
	Field dwPageSize%
	Field lpMinimumApplicationAddress%
	Field lpMaximumApplicationAddress%
	Field dwActiveProcessorMask%
	Field dwNumberOfProcessors%
	Field dwProcessorType%
	Field dwAllocationGranularity%
	Field wProcessorLevel%
	Field wProcessorRevision%
End Type

Type OSInfo
	Field OSVersionInfoSize%
	Field MajorVersion%
	Field MinorVersion%
	Field BuildNumber%
	Field PlatformId%
	Field CSDVersion:Byte Ptr ' 128 in length
End Type


Global sys:SystemInfo=New SystemInfo
Global os:OSInfo=New OSInfo
os.OSVersionInfoSize=128+20

GetVersionExA os
GetSystemInfo sys
Local rev=sys.wProcessorRevision


' example
Print "_______________________________________________________"
Print "processor 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
Print "_______________________________________________________"
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: "+String(os.MajorVersion)+"."+String(os.MinorVersion)
Print "           Build: "+String(os.BuildNumber)


' system processor details
Print "_______________________________________________________"
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 & $FF00) = $FF00
				procname$=procname$ + " Model " + String(((rev & $F0)/$F)-10) + " Stepping " + String((rev & $F))
			Else
				procname$=procname$ + " Stepping " + Chr$(65+(rev & $FF)/$FF) + " Stepping " + String(rev & $FF)
			End If
			Case 4
			procname$="Intel 80486"
			If (rev & $FF00) = $FF00
				procname$=procname$ + " Model " + String(((rev & $F0) / $F) - 10) + " Stepping " + String((rev & $F))
			Else
				procname$=procname$ + " Stepping " + Chr$(Asc("A")) + String((rev & $FF)/$FF) + " Stepping " + String(rev & $FF)
			End If
			Case 5
			procname$ = "Pentium Model " + String((rev & $FF00)/$FF) + " Stepping " + String((rev & $FF))
			Case 6
			procname$ = "Pentium II Model " + String ((rev & $FF00)/$FF) + " Stepping " + String((rev & $FF))
			Case 7
			procname$ = "Pentium III Model " + String ((rev & $FF00)/$FF) + " Stepping " + String((rev & $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" + String((rev & $FF00)/$FF) + " Pass " + String(rev & $FF)
	' PPC Architecture (only For WinNT)
	Case PROCESSOR_ARCHITECTURE_PPC
	Select sys.wProcessorLevel
		Case 1, 3, 4, 20
		procname$ = "PPC 6" + Right$("0000000000000000"+String(sys.wProcessorLevel),2)
		Case 6
		procname$ = "PPC 603+"
		Case 9
		procname$ = "PPC 604+"
	End Select
	procname$ = procname$ + " Processor Version " + String((rev & $FF00)/$FF) + "." + String(rev & $FF)
End Select

Print procname$
Print "_______________________________________________________"

End