我想要 vb6 代码来检查操作系统是 32 位还是 64 位,处理器是 32 位还是 64 位。所以请帮我获取这些代码。在 vb.net 中,我可以使用 Environment.Is64BitOperatingSystem 属性,它仅适用于 .net 4.0 及更高版本。但是如何在 vb6 中获取这些信息?
5 回答
回答这两个问题的最直接方法似乎是使用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
对于 CPU,您可以使用 WMI 并获取 AddressWidth。可以在此处找到 VBScript 示例
您可以尝试 WMI 类的DataWidth
orAddressWidth
属性Win32_Processor
,在 32 位处理器上,值为 32,在 64 位处理器上为 64。
操作系统架构
获得它的一种方法是使用GetNativeSystemInfo
WinAPI 函数。它包含在链接的问题中。
操作系统架构也可以通过 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
在 Windows Xp 32b 上,Win32_Processor.AddressWidth 返回 ALWAYS 32。请参阅帖子MAP 工具如何发现它是 64 位机器?