我希望得到VB6代码来检查操作系统是32位还是64位,以及处理器是32位还是64位。请帮助我获取这些代码。 在VB.NET中,我可以使用Environment.Is64BitOperatingSystem属性来实现,但它只适用于.NET 4.0及以上版本。 但是我该如何在VB6中获取这些信息呢?
可以通过检查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
可以通过检查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
对于CPU,您可以使用WMI并获取AddressWidth。
VBScript的示例可以在此处找到。
AddressWidth
为32。实际上,我认为我的答案是正确的 https://dev59.com/QHDYa4cB1Zd3GeqPAGsu#15860411。 - Ilya Kurnosov操作系统架构
获取操作系统架构的一种方法是使用GetNativeSystemInfo
WinAPI函数。这在链接的问题中有涉及。
也可以通过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