Get CPU Info

By | 2019-09-26

Using GetSystemInfo, inside of kernel32, we can get all kinds of information about the local computer. This example shows how to retrieve the description of the CPU.

Module

'API Structures
Public Type SYSTEM_INFO
    wProcessorArchitecture As Integer
    wReserved As Integer
    dwPageSize As Long
    lpMinimumApplicationAddress As Long
    lpMaximumApplicationAddress As Long
    dwActiveProcessorMask As Long
    dwNumberOfProcessors As Long
    dwProcessorType As Long
    dwAllocationGranularity As Long
    wProcessorLevel As Integer
    wProcessorRevision As Integer
End Type

Public Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

'API Calls
Public Declare Sub GetSystemInfo Lib "kernel32.dll" (lpSystemInfo As SYSTEM_INFO)
Public Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

'API Constants
Public Const PROCESSOR_ARCHITECTURE_ALPHA = 2
Public Const PROCESSOR_ARCHITECTURE_INTEL = 0
Public Const PROCESSOR_ARCHITECTURE_MIPS = 1
Public Const PROCESSOR_ARCHITECTURE_PPC = 3
Public Const PROCESSOR_ARCHITECTURE_UNKNOWN = &HFFFF
Public Const PROCESSOR_INTEL_386 = 386
Public Const PROCESSOR_INTEL_486 = 486
Public Const PROCESSOR_INTEL_PENTIUM = 586
Public Const PROCESSOR_INTEL_PENTIUM2 = 686
Public Const PROCESSOR_INTEL_PENTIUM3 = 786
Public Const PROCESSOR_MIPS_R4000 = 4000
Public Const VER_PLATFORM_WIN32_NT = 2
Public Const VER_PLATFORM_WIN32_WINDOWS = 1
'get a string with the description of the system's processor
Public Function GetProcessorType() As String
    Dim si As SYSTEM_INFO
    Dim os As OSVERSIONINFO

    'retrive the Windows Platform
    os.dwOSVersionInfoSize = Len(os)
    GetVersionEx os
    'retrive the SYSTEM_INFO Structure
    GetSystemInfo si
    Select Case si.wProcessorArchitecture
    'Intel Architecture
    Case PROCESSOR_ARCHITECTURE_INTEL
        Select Case os.dwPlatformId
        Case VER_PLATFORM_WIN32_NT
            Select Case si.wProcessorLevel
            Case 3
                GetProcessorType = "Intel 80386"
                If (si.wProcessorRevision And &HFF00) = &HFF00 Then
                    GetProcessorType = GetProcessorType And " Model " & ((si.wProcessorRevision And &HF0) / &HF) - 10 & " Stepping " & (si.wProcessorRevision And &HF)
                Else
                    GetProcessorType = GetProcessorType And " Stepping " & Chr(Asc("A") + (si.wProcessorRevision And &HFF) / &HFF) & " Stepping " & (si.wProcessorRevision And &HFF)
                End If
            Case 4
                GetProcessorType = "Intel 80486"
                If (si.wProcessorRevision And &HFF00) = &HFF00 Then
                    GetProcessorType = GetProcessorType And " Model " & ((si.wProcessorRevision And &HF0) / &HF) - 10 & " Stepping " & (si.wProcessorRevision And &HF)
                Else
                    GetProcessorType = GetProcessorType And " Stepping " & Chr(Asc("A") + (si.wProcessorRevision And &HFF) / &HFF) & " Stepping " & (si.wProcessorRevision And &HFF)
                End If
            Case 5
                GetProcessorType = "Pentium Model " & (si.wProcessorRevision And &HFF00) \ &HFF & " Stepping " & (si.wProcessorRevision And &HFF)
            Case 6
                GetProcessorType = "Pentium II Model " & (si.wProcessorRevision And &HFF00) \ &HFF & " Stepping " & (si.wProcessorRevision And &HFF)
            Case 7
                GetProcessorType = "Pentium III Model " & (si.wProcessorRevision And &HFF00) \ &HFF & " Stepping " & (si.wProcessorRevision And &HFF)
            End Select
        Case VER_PLATFORM_WIN32_WINDOWS
            Select Case si.dwProcessorType
            Case PROCESSOR_INTEL_386
                GetProcessorType = "Intel 80386"
            Case PROCESSOR_INTEL_486
                GetProcessorType = "Intel 80486"
            Case PROCESSOR_INTEL_PENTIUM
                GetProcessorType = "Pentium"
            Case PROCESSOR_INTEL_PENTIUM2
                GetProcessorType = "Pentium II"
            Case PROCESSOR_INTEL_PENTIUM3
                GetProcessorType = "Pentium III"
            End Select
        End Select
    'MIPS Architecture (only for WinNT)
    Case PROCESSOR_ARCHITECTURE_MIPS
        GetProcessorType = "MIPS R" & si.wProcessorLevel & "000"
    'ALPHA Architecture (only for WinNT)
    Case PROCESSOR_ARCHITECTURE_ALPHA
        GetProcessorType = "Alpha " & si.wProcessorLevel & " Model A" & (si.wProcessorRevision And &HFF00) \ &HFF & " Pass " & (si.wProcessorRevision And &HFF)
    'PPC Architecture (only for WinNT)
    Case PROCESSOR_ARCHITECTURE_PPC
        Select Case si.wProcessorLevel
        Case 1, 3, 4, 20
            GetProcessorType = "PPC 6" & Format(si.wProcessorLevel, "00")
        Case 6
            GetProcessorType = "PPC 603+"
        Case 9
            GetProcessorType = "PPC 604+"
        End Select
        GetProcessorType = GetProcessorType & " Processor Version " & (si.wProcessorRevision And &HFF00) \ &HFF & "." & (si.wProcessorRevision And &HFF)
    End Select
End Function

Usage

Private Sub Command1_Click()
    MsgBox GetProcessorType
End Sub

Author: dwirch

Derek Wirch is a seasoned IT professional with an impressive career dating back to 1986. He brings a wealth of knowledge and hands-on experience that is invaluable to those embarking on their journey in the tech industry.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.