2013-02-18 83 views
8

这个问题How can I determine the Windows version from a VB 6 app有一个来自Cody Gray的非常有用的答案,它利用GetVersionEx和Select Case语句将Windows版本作为用户友好的字符串返回。如何获得面向未来的用户友好操作系统版本?

但是,给出的代码是有限的,因为所有的返回值都是硬编码的,这意味着它不是未来的证明,并且每当新版Windows出来时都需要重写,例如Windows 8。

除了使用GetVersionEx和Select Case语句之外,是否还有其他选项用于检索用户友好的操作系统名称,该名称也将相对有前途证明?

+0

地球上是什么让你认为GetVersionEx不会在未来版本的Windows的支持? – 2013-02-18 14:07:53

+2

@HansPassant如果您查看答案和示例代码,您将看到在使用GetVersionEx之后,您必须使用硬编码值执行复杂的Select语句。因此,每次出现新版Windows时,都必须修复代码。 – 2013-02-18 14:50:43

+5

所以这是关于显示OS的营销名称(“Windows超现代Spiffy Penultimate Lunar版”)?出于某种功能原因而不是检测平台? – Bob77 2013-02-18 15:52:27

回答

7

WMI classes可用于提取所需的数据如下:

Public Function GetFriendlyOSVersion() As String 
    Dim query As String 
    query = "SELECT Caption FROM Win32_OperatingSystem" 
    Dim results As Object 
    Set results = GetObject("Winmgmts:").ExecQuery(query) 
    Dim info As Object 
    For Each info In results 
     GetFriendlyOSVersion = info.Caption 
    Next info 
End Function 
+0

同样的问题也打扰了我,测试Caption是我意识到的唯一选择,但它是否安全? – 2013-02-18 20:17:18

+0

是的,我现在已经尝试过并在生产代码中实现了它,没有任何问题。 – 2013-02-19 17:58:39

+0

啊,我知道它的工作原理,我只是不确定Caption是只读属性吗? – 2013-02-19 18:39:47

相关问题