【问题标题】:Convert Windows version number to double将 Windows 版本号转换为双倍
【发布时间】:2013-04-29 02:41:24
【问题描述】:

我对此有疑问:

Private Function Get_NT_Version()

    Dim NT As Decimal = CDec(System.Environment.OSVersion.Version.ToString.Substring(0, 3))

    MsgBox(NT)

    Return NT

End Function

我在 Win7 上运行,所以我想获得十进制或双精度值:“6.1”,但我得到的是:“61

这就是我想做的:

If Get_NT_Version() < 6.0 Then

   msgbox("This application only works with an Aero compatible windows version")
   Application.Exit()

end if

更新:

也尝试过这个想法,但返回“61”

Dim s As Double = String.Format("{0}.{1}", System.Environment.OSVersion.Version.ToString.Split(".")(0), System.Environment.OSVersion.Version.ToString.Split(".")(1))

【问题讨论】:

  • 你不能像这样写代码吗Private Function Get_NT_Version() As Object Dim NT As Decimal = Convert.ToDecimal(System.Environment.OSVersion.Version.ToString.Substring(0, 3)) Interaction.MsgBox(NT) Return NT End Function
  • 对于所有 Windows 7,整个字符串为“6.1.7601.65536”,应用的子字符串为“6.1”,当我尝试返回一个整数值以作为条件时,我得到一个“61” “6.1”。
  • 我会发布一些我认为是您获取版本所需的内容
  • 好的,谢谢,我已经测试了您评论的功能,但返回 61,无论我需要使用 string.format 还是将字符串转换为任何类型,但我无法执行条件像这样:“如果字符串低于 6.1 则……”你知道的。
  • Elektro Hacker 除了我的回答之外,我将发布一个更深入的示例供您扩展。

标签: .net windows vb.net windowsversion


【解决方案1】:

这对你有用,我刚刚在 C# 中对其进行了测试,并为你将我的 C# 解决方案转换为 VB。

Private Function Get_NT_Version() As String
    Dim NT As String = Environment.OSVersion.Version.ToString()
    MessageBox.Show(NT.Substring(0, 3))
    Return NT
End Function

如果你想更进一步,你也可以使用下面的代码

Private Sub Form1_Load(sender As Object, e As EventArgs)
    Dim str As String = Environment.OSVersion.Version.ToString()
    Dim OsName As String = ""
    If str.Contains("1.04") Then
        OsName = "Windows 1.0"
    ElseIf str.Contains("2.11") Then
        OsName = "Windows 2.0"
    ElseIf str.Contains("3") Then
        OsName = "Windows 3.0"
    ElseIf str.Contains("3.10.528") Then
        OsName = "Windows NT 3.1"
    ElseIf str.Contains("3.11 3.11") Then
        OsName = "Windows for Workgroups"
    ElseIf str.Contains("3.5 3.5.807") Then
        OsName = "Windows NT Workstation"
    ElseIf str.Contains("3.51 3.51.1057") Then
        OsName = "Windows NT Workstation"
    ElseIf str.Contains("4.0.950") Then
        OsName = "Windows 95"
    ElseIf str.Contains("4.0.1381") Then
        OsName = "Windows NT Workstation 4.0"
    ElseIf str.Contains("4.1.1998") Then
        OsName = "Windows 98"
    ElseIf str.Contains("4.1.2222") Then
        OsName = "Windows 98 Second Edition"
    ElseIf str.Contains("4.90.3000") Then
        OsName = "Windows Me"
    ElseIf str.Contains("5.0.2195") Then
        OsName = "Windows 2000 Professional"
    ElseIf str.Contains("5.1.2600") Then
        OsName = "Windows XP"
    ElseIf str.Contains("5.2.3790") Then
        OsName = "Windows XP Professional x64 Edition"
    ElseIf str.Contains("6.0.6000") Then
        OsName = "Windows Vista"
    ElseIf str.Contains("6.0.6002") Then
        OsName = "Windows Vista SP2"
    ElseIf str.Contains("6.1.7600") Then
        OsName = "Windows 7"
    ElseIf str.Contains("6.0.6000") Then
        OsName = "Windows Vista"
    ElseIf str.Contains("6.0.6000") Then
        OsName = "Windows Vista"
    End If
    MessageBox.Show(OsName + " " + Environment.OSVersion.ServicePack)
End Sub

【讨论】:

  • 但是返回的类型是一个字符串 :-/ 无论如何谢谢你的辛勤工作! +1
  • 不客气,因为IFormatter or IConvertable,所以将版本作为字符串而不是尝试将其作为小数更容易,如果你能按照我说的话..
  • 真的没有,我不了解接口(那个 sems 接口可能我错了),但是你在维基百科上为我节省了大量时间来分配 "OsName=" 值,如你的代码^^,问候!
【解决方案2】:

我找到了使用 VAL 的解决方案:

#Region " Get NT Version "

    ' [ Get NT Version Function ]
    '
    ' // By Elektro H@cker
    '
    ' Examples :
    ' MsgBox(Get_NT_Version())
    ' If Get_NT_Version() < 6.0 Then MsgBox("This application only works with an Aero compatible windows version")

    Private Function Get_NT_Version() As Double

        Dim NT As Double = CDbl(Val(System.Environment.OSVersion.Version.ToString.Substring(0, 3)))

        ' INFO:
        ' -----
        ' 3.1 = Windows NT 3.1
        ' 3.5 = Windows NT 3.5
        ' 4.0 = Windows NT 4.0
        ' 5.0 = Windows 2000
        ' 5.1 = Windows XP / Windows Fundamentals for Legacy PCs
        ' 5.2 = Windows XP 64 Bit / Windows server 2003 / Windows server 2003 R2 / Windows home Server /
        ' 6.0 = Windows VISTA / Windows server 2008
        ' 6.1 = Windows 7 / Windows server 2008 R2
        ' 6.2 = Windows 8 / Windows 8 Phone / Windows Server 2012

        Return NT

    End Function

#End Region

就这么简单!

【讨论】:

  • 这也可以。我是一名 C# 开发人员,但我也知道 VB,只是考虑一下 C# 与 VB +1 的关系,以找到解决原始问题的替代解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2019-10-03
  • 2014-11-24
相关资源
最近更新 更多