Vb6 检查操作系统和处理器是32位还是64位?

Vb6 检查操作系统和处理器是32位还是64位?,vb6,wmi,Vb6,Wmi,我想用vb6代码检查操作系统是32位还是64位,处理器是32位还是64位。所以请帮我获取这些代码。 在vb.net中,我可以使用Environment.Is64BitOperatingSystem属性,它仅在.net 4.0及更高版本中工作。 但是如何在vb6中获取这些信息呢?对于CPU,您可以使用WMI并获取AddressWidth。 可以找到VBScript的示例您可以尝试WMI类的DataWidth或AddressWidth属性,在32位处理器上,值为32,在64位处理器上,值为64。操作

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

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

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

操作系统体系结构

获取它的一种方法是使用
GetNativeSystemInfo
WinAPI函数。它覆盖着一层薄纱

操作系统架构也可以通过WMI获得,以防您希望以类似的方式实现这两个目标。在Windows Vista和更新的操作系统中,可以查询
Win32\u OperatingSystem
类并分析
OSArchitecture
属性()。遗憾的是,此属性在Windows XP和早期版本中不存在。在这些系统上,可以查询
Win32\u ComputerSystem
类并分析
SystemType
属性()


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


操作系统是32位还是64位? 对于操作系统,可以检查
AddressWidth
属性:

地址宽度

在32位操作系统上,值为32,而在64位操作系统上,值为32 操作系统是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
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

处理器是32位还是64位? 对于处理器,可以检查
DataWidth
属性:

DataWidth

在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
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

在Windows Xp 32b上,Win32_处理器.AddressWidth始终返回32。请参阅文章

了解详细信息尝试以下操作:您可以查询Win32_OperatingSystem类的OSArchitecture属性。那是不对的<如果您在64位处理器上运行32位操作系统,则代码>地址宽度实际上是32。我认为我的答案是正确的。地址宽度没有根据指定进程是32位还是64位,而是根据Win32中的“体系结构”来指定处理器体系结构。@winman我做了更多的测试,你是正确的。我从这篇文章中删除了与CPU相关的部分(因为它确实是错误的),并给出了不同的答案: