2013-04-29 45 views
0

我有這個一個問題:我在Win7上運行轉換Windows版本數量將翻一番

Private Function Get_NT_Version() 

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

    MsgBox(NT) 

    Return NT 

End Function 

所以我想獲得這個值作爲小數或雙:「6.1」但什麼我得到的是這樣的: 「」

這就是我想做的事:

If Get_NT_Version() < 6.0 Then 

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

end if 

UPDATE:

試過這種想法太多,但返回一個「61」

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

你不能做的代碼,而不是 '專用功能Get_NT_Version()這樣的事情作爲對象 \t昏暗NT爲十進制= Convert.ToDecimal(System.Environment.OSVersion.Version.ToString.Substring(0, 3)) \t Interaction.MsgBox(NT) \t返回NT 結束Function' – MethodMan 2013-04-29 02:44:50

+0

對於所有Windows 7的整個字符串爲 「6.1.7601.65536」,與應用子是 「6.1」,當我嘗試返回一個整數值作出條件我得到一個「61」,而不是「6.1」。 – ElektroStudios 2013-04-29 02:48:15

+0

我會發布一些東西,我認爲是所有你需要的版本 – MethodMan 2013-04-29 02:49:19

回答

1

我發現使用VAL解決方案:

#Region " Get NT Version " 

    ' [ Get NT Version Function ] 
    ' 
    ' // By Elektro [email protected] 
    ' 
    ' 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 

就那麼簡單!

+1

這將工作以及我是一名C#開發人員,但我確實知道VB以及就C#與VB + 1而言,想找到一個替代解決方案來解決您的原始問題 – MethodMan 2013-04-29 03:17:34

2

這會爲你工作,我只是在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 
+0

但返回的類型是一個字符串: -/anyways謝謝你的辛勤工作! +1 – ElektroStudios 2013-04-29 03:15:49

+1

你是weclome,它更容易得到版本作爲字符串vs試圖得到它作爲十進制,因爲IFormatter或IConvertable,如果你可以按照我所說的.. – MethodMan 2013-04-29 03:20:02

+1

真的不是,我不瞭解了接口(這些接口可能我錯了),但是你在維基百科上爲我節省了大量的時間,以便像在代碼中那樣分配「OsName =」值^^,問候! – ElektroStudios 2013-04-29 03:24:01