检查OS和处理器是32位还是64位?

时间:2013-04-02 13:46:55

标签: vb6 wmi

我希望vb6代码检查操作系统是32位还是64位,处理器也是32位或64位。所以请帮助我获取这些代码。 在vb.net中,我可以使用Environment.Is64BitOperatingSystem属性,它只能在.net 4.0及更高版本中使用。 但是如何在vb6中获取这些信息?

5 个答案:

答案 0 :(得分:3)

对于CPU,您可以使用WMI并获取AddressWidth。 可以找到VBScript的样本here

答案 1 :(得分:3)

回答这两个问题的最简单方法似乎是使用Win32_Processor WMI类。


操作系统是32位还是64位?

对于操作系统,可以检查AddressWidth属性:

  

<强> AddressWidth

     

在32位操作系统上,该值为32且为64位   操作系统是64。

相关的VB6代码是:

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

处理器是32位还是64位?

对于处理器,可以检查DataWidth属性:

  

<强> DataWidth

     

在32位处理器上,该值为32,在64位处理器上为   64。

相关的VB6代码是:

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

答案 2 :(得分:1)

您可以尝试Win32_Processor WMI类的DataWidthAddressWidth属性,在32位处理器上,值为32,在64位处理器上为64

答案 3 :(得分:1)

操作系统架构

获得它的一种方法是使用GetNativeSystemInfo WinAPI函数。它包含在linked question中。

OS体系结构也可以通过WMI获得,以防您想以类似的方式实现这两个目标。在Windows Vista和更新的操作系统中,可以查询Win32_OperatingSystem类并分析OSArchitecture属性(MSDN)。遗憾的是,Windows XP和早期版本中不存在此属性。在这些系统上,可以查询Win32_ComputerSystem类并分析SystemType属性(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

答案 4 :(得分:0)

在Windows Xp 32b上,Win32_Processor.AddressWidth总是返回32.查看帖子How does the MAP tool find out it's a 64-Bit machine?