Requirements
需要:
Windows NT/2000/XP: Included in Windows 2000 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.
To Chice_wxg(VS.NET = 光驱烤肉,我也入网了)
你的那个API只对9x/Me有效啊!
--------------------------------------------------------------------
Made by Thirdapple's Studio(http://3rdapple.51.net/)
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" ( _
lpVersionInformation As OSVERSIONINFOEX) As Long
Private Const VS_FF_DEBUG = &H1&
Private Const VS_FF_INFOINFERRED = &H10&
Private Const VS_FF_PATCHED = &H4&
Private Const VS_FF_PRERELEASE = &H2&
Private Const VER_NT_SERVER = &H3
Private Const VER_NT_WORKSTATION = &H1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32s = 0
Private Const VER_PLATFORMID = &H8
Private Const VER_SERVER_NT = &H80000000
Private Const VER_SUITE_DATACENTER = &H80
Private Const VER_SUITE_ENTERPRISE = &H2
Private Const VER_WORKSTATION_NT = &H40000000
Private Type OSVERSIONINFOEX
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
wServicePackMajor As Integer
wServicePackMinor As Integer
wSuiteMask As Integer
wProductType As Byte
wReserved As Byte
End Type
Public Function GetOSName() As String
Dim OSV As OSVERSIONINFOEX 'Definition of OSVERSIONINFOEX
Dim OS As String 'Temp string for OS name
OSV.dwOSVersionInfoSize = Len(OSV) 'Size of OSVERSIONINFOEX must be initialize first or OS retrival name will not be shown good
Call GetVersionEx(OSV) 'Filling OSVERSIONINFOEX with informations
Select Case OSV.dwPlatformId
Case VER_PLATFORM_WIN32_NT
If OSV.dwMajorVersion <= 4 Then OS = "Microsoft Windows NT " 'Win is NT
If OSV.dwMajorVersion = 5 And OSV.dwMinorVersion = 0 Then OS = "Microsoft Windows 2000 " 'Win is 2000
If OSV.dwMajorVersion = 5 And OSV.dwMinorVersion = 1 Then OS = "Microsoft Windows XP " 'Win is XP
If OSV.wProductType = VER_NT_WORKSTATION Then
If OSV.wSuiteMask And 256 Then
OS = OS & "Professional " ' Win is Pro Edition
Else
OS = OS & "Home Edition " 'Personal if not XP
End If
ElseIf OSV.wProductType = VER_SERVER_NT Then
If OSV.wSuiteMask And VER_SUITE_DATACENTER Then
OS = OS & "DataCenter Server " 'DataCenter Server
ElseIf OSV.wSuiteMask And VER_SUITE_ENTERPRISE Then
OS = OS & "Advanced Server " 'Advanced Server
Else
OS = OS & "Server " 'Server Only
End If
End If
Case VER_PLATFORM_WIN32_WINDOWS
If OSV.dwMajorVersion = 4 And OSV.dwMinorVersion = 0 Then
OS = "Microsoft Windows 95 " 'Win is 95
If OSV.szCSDVersion = "C" Or OSV.szCSDVersion = "B" Then OS = OS & "OSR2 " 'Win is OSR2 Edition
End If
If OSV.dwMajorVersion = 4 And OSV.dwMinorVersion = 10 Then
OS = "Microsoft Windows 98 " 'Win is 98
If OSV.szCSDVersion = "A" Then OS = OS & "SE " 'Win is Second Edition
End If
If OSV.dwMajorVersion = 4 And OSV.dwMinorVersion = 90 Then OS = "Microsoft Windows Me " 'Win is Me
Case VER_PLATFORM_WIN32s
OS = "Microsoft Win32s" 'If version cannot be retrived then it's WIN32
End Select
GetOSName = OS 'Fill main function with temp string variable
Public Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Public Function GetWindowsVersion(WinVersion) As String
Dim OSInfo As OSVERSIONINFO
Dim RetAs Integer
OSInfo.dwOSVersionInfoSize = 148
OSInfo.szCSDVersion = Space$(128)
Ret = GetVersionExA(OSInfo)
With OSInfo
Select Case .dwPlatformId
Case 1
If .dwMinorVersion < 10 Then
If .dwBuildNumber = 950 Then
WinVersion = "Windows 95"
ElseIf .dwBuildNumber > 950 Or .dwBuildNumber <= 1080 Then
WinVersion = "Windows 95 SP1"
Else
WinVersion = "Windows 95 OSR2"
End If
ElseIf .dwMinorVersion = 10 Then
If .dwBuildNumber = 1998 Then
WinVersion = "Windows 98"
ElseIf .dwBuildNumber > 1998 Or .dwBuildNumber < 2183 Then
WinVersion = "Windows 98 SP1"
ElseIf .dwBuildNumber >= 2183 Then
WinVersion = "Windows 98 SE"
End If
Else
WinVersion = "Windows ME"
End If
Case 2
If .dwMajorVersion = 3 Then
WinVersion = "Windows NT 3.51"
ElseIf .dwMajorVersion = 4 Then
WinVersion = "Windows NT 4.0"
ElseIf .dwMajorVersion = 5 Then
If .dwMinorVersion = 0 Then
WinVersion = "Windows 2000"
Else
WinVersion = "Windows XP"
End If
End If
Case 3
If .dwMajorVersion = 1 Then
WinVersion = "Windows CE 1.0"
ElseIf .dwMajorVersion = 2 Then
If .dwMinorVersion = 0 Then
WinVersion = "Windows CE 2.0"
Else
WinVersion = "Windows CE 2.1"
End If
Else
WinVersion = "Windows CE 3.0"
End If
Case Else
WinVersion = "Unable To Get Windows Version"
End Select
End With
End Function