check OS and processor is 32 bit or 64 bit?

后端 未结 5 1899
谎友^
谎友^ 2021-01-19 10:09

I want vb6 code to check OS is 32 bit or 64 bit and also processor is 32 bit or 64 bit.So please help me to get these codes. In vb.net i can use Environment.Is64BitOperating

相关标签:
5条回答
  • 2021-01-19 10:49

    You can try the DataWidth or AddressWidth properties of the Win32_Processor WMI class, On a 32-bit processor, the value is 32 and on a 64-bit processor it is 64.

    0 讨论(0)
  • 2021-01-19 10:54

    On a Windows Xp 32b, the Win32_Processor.AddressWidth returns ALWAYS 32. See the post How does the MAP tool find out it's a 64-Bit machine?

    0 讨论(0)
  • 2021-01-19 10:57

    For CPU you can use WMI and get AddressWidth. A sample of VBScript can be found here

    0 讨论(0)
  • 2021-01-19 11:00

    Operating system architecture

    One way to obtain it is to use GetNativeSystemInfo WinAPI function. It is covered in linked question.

    OS architecture can be obtained through WMI too, in case you'd like to achieve both goals in similar way. In Windows Vista and newer operating systems one can query Win32_OperatingSystem class and analyze OSArchitecture property (MSDN). Sadly, this property doesn't exist in Windows XP and earlier versions. On these systems one may query Win32_ComputerSystem class and analyze SystemType property instead (MSDN).

    Public Function GetOsArchitecture()
        If IsAtLeastVista Then
            GetOsArchitecture = GetVistaOsArchitecture
        Else
            GetOsArchitecture = GetXpOsArchitecture
        End If
    End Function
    
    Private Function IsAtLeastVista() As Boolean
        IsAtLeastVista = GetOsVersion >= "6.0"
    End Function
    
    Private Function GetOsVersion() As String
        Dim OperatingSystemSet As Object
        Dim OS As Object
    
        Set OperatingSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
                                        InstancesOf("Win32_OperatingSystem")
        For Each OS In OperatingSystemSet
            GetOsVersion = Left$(Trim$(OS.Version), 3)
        Next
    End Function
    
    Private Function GetVistaOsArchitecture() As String
        Dim OperatingSystemSet As Object
        Dim OS As Object
    
        Set OperatingSystemSet = GetObject("Winmgmts:"). _
            ExecQuery("SELECT * FROM Win32_OperatingSystem")
        For Each OS In OperatingSystemSet
            GetVistaOsArchitecture = Left$(Trim$(OS.OSArchitecture), 2)
        Next
    End Function
    
    Private Function GetXpOsArchitecture() As String
        Dim ComputerSystemSet As Object
        Dim Computer As Object
        Dim SystemType As String
    
        Set ComputerSystemSet = GetObject("Winmgmts:"). _
            ExecQuery("SELECT * FROM Win32_ComputerSystem")
        For Each Computer In ComputerSystemSet
            SystemType = UCase$(Left$(Trim$(Computer.SystemType), 3))
        Next
    
        GetXpOsArchitecture = IIf(SystemType = "X86", "32", "64")
    End Function
    
    0 讨论(0)
  • 2021-01-19 11:03

    The most straightforward way to answer both questions seems to be using Win32_Processor WMI class.


    Is operating system 32-bit or 64-bit?

    For operating system one can check AddressWidth property:

    AddressWidth

    On a 32-bit operating system, the value is 32 and on a 64-bit operating system it is 64.

    Relevant VB6 code is:

    Public Function GetOsBitness() As String
        Dim ProcessorSet As Object
        Dim CPU As Object
    
        Set ProcessorSet = GetObject("Winmgmts:"). _
            ExecQuery("SELECT * FROM Win32_Processor")
        For Each CPU In ProcessorSet
            GetOsBitness = CStr(CPU.AddressWidth)
        Next
    End Function
    

    Is processor 32-bit or 64-bit?

    For processor one can check DataWidth property:

    DataWidth

    On a 32-bit processor, the value is 32 and on a 64-bit processor it is 64.

    Relevant VB6 code is:

    Public Function GetCpuBitness() As String
        Dim ProcessorSet As Object
        Dim CPU As Object
    
        Set ProcessorSet = GetObject("Winmgmts:"). _
            ExecQuery("SELECT * FROM Win32_Processor")
        For Each CPU In ProcessorSet
            GetCpuBitness = CStr(CPU.DataWidth)
        Next
    End Function
    
    0 讨论(0)
提交回复
热议问题