4

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

4

5 回答 5

3

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


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

对于操作系统,可以检查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属性:

数据宽度

在 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
于 2013-04-07T08:29:43.680 回答
3

对于 CPU,您可以使用 WMI 并获取 AddressWidth。可以在此处找到 VBScript 示例

于 2013-04-02T14:00:14.127 回答
1

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

于 2013-04-02T16:30:09.503 回答
1

操作系统架构

获得它的一种方法是使用GetNativeSystemInfoWinAPI 函数。它包含在链接的问题中。

操作系统架构也可以通过 WMI 获得,以防您想以类似的方式实现这两个目标。在 Windows Vista 和更新的操作系统中,可以查询Win32_OperatingSystem类和分析OSArchitecture属性 ( MSDN )。遗憾的是,此属性在 Windows XP 和更早版本中不存在。在这些系统上,可以改为查询Win32_ComputerSystem类和分析属性 ( MSDN )。SystemType

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
于 2013-04-05T21:17:55.567 回答
0

在 Windows Xp 32b 上,Win32_Processor.AddressWidth 返回 ALWAYS 32。请参阅帖子MAP 工具如何发现它是 64 位机器?

于 2013-08-22T13:13:02.890 回答