我希望vb6代码检查操作系统是32位还是64位,处理器也是32位或64位。所以请帮助我获取这些代码。 在vb.net中,我可以使用Environment.Is64BitOperatingSystem属性,它只能在.net 4.0及更高版本中使用。 但是如何在vb6中获取这些信息?
答案 0 :(得分:3)
对于CPU,您可以使用WMI并获取AddressWidth。 可以找到VBScript的样本here
答案 1 :(得分:3)
回答这两个问题的最简单方法似乎是使用Win32_Processor WMI类。
对于操作系统,可以检查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
答案 2 :(得分:1)
您可以尝试Win32_Processor
WMI类的DataWidth
或AddressWidth
属性,在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?