WORD GetWindowType() { OSVERSIONINFOEX osInfo; WORD osVer = 0; ZeroMemory(&osInfo, sizeof(OSVERSIONINFOEX)); osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(!GetVersionEx((LPOSVERSIONINFO)&osInfo)) { osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(!GetVersionEx((LPOSVERSIONINFO)&osInfo)) return 0; } switch(osInfo.dwPlatformId) { case VER_PLATFORM_WIN32_NT: osVer = 1; break; case VER_PLATFORM_WIN32_WINDOWS: osVer = 0; break; case VER_PLATFORM_WIN32s: osVer = 0; break; } return osVer; }
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End TypePrivate Sub Form_Load() Dim OSInfo As OSVERSIONINFO, Pid As String Me.AutoRedraw = True 'Set the structure size OSInfo.dwOSVersionInfoSize = Len(OSInfo) 'Get the Windows version Ret& = GetVersionEx(OSInfo) 'Chack for errors If Ret& = 0 Then MsgBox "Error Getting Version Information": Exit Sub 'Print the information to the form Select Case OSInfo.dwPlatformId Case 0 Pid = "Windows 32s " Case 1 Pid = "Windows 95/98" Case 2 Pid = "Windows NT " End Select Print "OS: " + Pid Print "Win version:" + Str$(OSInfo.dwMajorVersion) + "." + LTrim(Str(OSInfo.dwMinorVersion)) Print "Build: " + Str(OSInfo.dwBuildNumber) End Sub
楼上的老大,能不能给点VB的呀??VC的不懂啊
二楼的是VB的啊,主要就是调用API函数GetVersionEx()
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 getVersion() As String Dim osinfo As OSVERSIONINFO Dim retvalue As Integer
Select Case .dwMinorVersion Case 0 getVersion = "Windows 95" Case 10 getVersion = "Windows 98" Case 90 getVersion = "Windows Mellinnium" End Select
Case 2 Select Case .dwMajorVersion Case 3 getVersion = "Windows NT 3.51" Case 4 getVersion = "Windows NT 4.0" Case 5 If .dwMinorVersion = 0 Then getVersion = "Windows 2000" Else getVersion = "Windows XP" End If End Select
Case Else getVersion = "Failed" End Select
End With End Function Add the following line of code to the Load event of Form1: MsgBox GetVersion()
Public Function GetWindowsVer(strWindowsName As String, lgWVerMajor As Long, lgWVerMinor As Long, lgWVerBuild As Long, lgWPlat As Long, Optional strWSP As String = "") As Long On Error GoTo Error_GetWindowsVer Dim stuOS As OSVERSIONINFO Dim varF stuOS.dwOSVersionInfoSize = Len(stuOS) varF = GetVersionEx(stuOS) If varF = 0 Then GetWindowsVer = -1 Exit Function End If Select Case stuOS.dwPlatformId Case VER_PLATFORM_WIN32_NT: lgWPlat = PLAT_WIN32NT Case VER_PLATFORM_WIN32_WINDOWS: lgWPlat = PLAT_WIN329X Case VER_PLATFORM_WIN32s: lgWPlat = PLAT_WIN3231 Case Else: lgWPlat = PLAT_UNKNOWN End Select Select Case lgWPlat Case PLAT_WIN32NT: If stuOS.dwMajorVersion > 4 Then If stuOS.dwMinorVersion = 1 Then strWindowsName = "Microsoft Windows XP" lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = stuOS.dwBuildNumber strWSP = stuOS.szCSDVersion Else strWindowsName = "Microsoft Windows 2000" lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = stuOS.dwBuildNumber strWSP = stuOS.szCSDVersion End If End If If stuOS.dwMajorVersion = 4 Then strWindowsName = "Microsoft Windows NT 4.0" lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = stuOS.dwBuildNumber strWSP = stuOS.szCSDVersion End If If stuOS.dwMajorVersion < 4 Then strWindowsName = "Microsoft Windows NT 3." & stuOS.dwMinorVersion & stuOS.dwBuildNumber lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = stuOS.dwBuildNumber End If Case PLAT_WIN329X: If (stuOS.dwBuildNumber And 65535) = 1998 Then strWindowsName = "Microsoft Windows 98" lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = (stuOS.dwBuildNumber And 65535) End If If ((stuOS.dwBuildNumber And 65535) > 1998) And ((stuOS.dwBuildNumber And 65535) <= 2222) Then strWindowsName = "Microsoft Windows 98 Second Edtion" lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = (stuOS.dwBuildNumber And 65535) End If If (stuOS.dwBuildNumber And 65535) < 1998 Then strWindowsName = "Microsoft Windows 95" lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = (stuOS.dwBuildNumber And 65535) End If If (stuOS.dwBuildNumber And 65535) > 2222 Then strWindowsName = "Microsoft Windows ME" lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = (stuOS.dwBuildNumber And 65535) End If Case PLAT_WIN3231: strWindowsName = "Microsoft Windows 3." & stuOS.dwMinorVersion lgWVerMajor = stuOS.dwMajorVersion lgWVerMinor = stuOS.dwMinorVersion lgWVerBuild = stuOS.dwBuildNumber Case PLAT_UNKNOWN: strWindowsName = "Unknown OS" lgWVerMajor = 0 lgWVerMinor = 0 lgWVerBuild = 0 End Select GetWindowsVer = 0 Exit_GetWindowsVer: Exit Function Error_GetWindowsVer: GetWindowsVer = -1 Resume Exit_GetWindowsVer End Function
{
OSVERSIONINFOEX osInfo;
WORD osVer = 0;
ZeroMemory(&osInfo, sizeof(OSVERSIONINFOEX));
osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!GetVersionEx((LPOSVERSIONINFO)&osInfo))
{
osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(!GetVersionEx((LPOSVERSIONINFO)&osInfo))
return 0;
}
switch(osInfo.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT:
osVer = 1;
break;
case VER_PLATFORM_WIN32_WINDOWS:
osVer = 0;
break;
case VER_PLATFORM_WIN32s:
osVer = 0;
break;
}
return osVer;
}
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End TypePrivate Sub Form_Load()
Dim OSInfo As OSVERSIONINFO, Pid As String
Me.AutoRedraw = True
'Set the structure size
OSInfo.dwOSVersionInfoSize = Len(OSInfo)
'Get the Windows version
Ret& = GetVersionEx(OSInfo)
'Chack for errors
If Ret& = 0 Then MsgBox "Error Getting Version Information": Exit Sub
'Print the information to the form
Select Case OSInfo.dwPlatformId
Case 0
Pid = "Windows 32s "
Case 1
Pid = "Windows 95/98"
Case 2
Pid = "Windows NT "
End Select
Print "OS: " + Pid
Print "Win version:" + Str$(OSInfo.dwMajorVersion) + "." + LTrim(Str(OSInfo.dwMinorVersion))
Print "Build: " + Str(OSInfo.dwBuildNumber)
End Sub
(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 getVersion() As String
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
With osinfo
Select Case .dwPlatformId
Case 1
Select Case .dwMinorVersion
Case 0
getVersion = "Windows 95"
Case 10
getVersion = "Windows 98"
Case 90
getVersion = "Windows Mellinnium"
End Select
Case 2
Select Case .dwMajorVersion
Case 3
getVersion = "Windows NT 3.51"
Case 4
getVersion = "Windows NT 4.0"
Case 5
If .dwMinorVersion = 0 Then
getVersion = "Windows 2000"
Else
getVersion = "Windows XP"
End If
End Select
Case Else
getVersion = "Failed"
End Select
End With
End Function
Add the following line of code to the Load event of Form1:
MsgBox GetVersion()
On Error GoTo Error_GetWindowsVer
Dim stuOS As OSVERSIONINFO
Dim varF
stuOS.dwOSVersionInfoSize = Len(stuOS)
varF = GetVersionEx(stuOS)
If varF = 0 Then
GetWindowsVer = -1
Exit Function
End If
Select Case stuOS.dwPlatformId
Case VER_PLATFORM_WIN32_NT:
lgWPlat = PLAT_WIN32NT
Case VER_PLATFORM_WIN32_WINDOWS:
lgWPlat = PLAT_WIN329X
Case VER_PLATFORM_WIN32s:
lgWPlat = PLAT_WIN3231
Case Else:
lgWPlat = PLAT_UNKNOWN
End Select
Select Case lgWPlat
Case PLAT_WIN32NT:
If stuOS.dwMajorVersion > 4 Then
If stuOS.dwMinorVersion = 1 Then
strWindowsName = "Microsoft Windows XP"
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = stuOS.dwBuildNumber
strWSP = stuOS.szCSDVersion
Else
strWindowsName = "Microsoft Windows 2000"
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = stuOS.dwBuildNumber
strWSP = stuOS.szCSDVersion
End If
End If
If stuOS.dwMajorVersion = 4 Then
strWindowsName = "Microsoft Windows NT 4.0"
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = stuOS.dwBuildNumber
strWSP = stuOS.szCSDVersion
End If
If stuOS.dwMajorVersion < 4 Then
strWindowsName = "Microsoft Windows NT 3." & stuOS.dwMinorVersion & stuOS.dwBuildNumber
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = stuOS.dwBuildNumber
End If
Case PLAT_WIN329X:
If (stuOS.dwBuildNumber And 65535) = 1998 Then
strWindowsName = "Microsoft Windows 98"
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = (stuOS.dwBuildNumber And 65535)
End If
If ((stuOS.dwBuildNumber And 65535) > 1998) And ((stuOS.dwBuildNumber And 65535) <= 2222) Then
strWindowsName = "Microsoft Windows 98 Second Edtion"
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = (stuOS.dwBuildNumber And 65535)
End If
If (stuOS.dwBuildNumber And 65535) < 1998 Then
strWindowsName = "Microsoft Windows 95"
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = (stuOS.dwBuildNumber And 65535)
End If
If (stuOS.dwBuildNumber And 65535) > 2222 Then
strWindowsName = "Microsoft Windows ME"
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = (stuOS.dwBuildNumber And 65535)
End If
Case PLAT_WIN3231:
strWindowsName = "Microsoft Windows 3." & stuOS.dwMinorVersion
lgWVerMajor = stuOS.dwMajorVersion
lgWVerMinor = stuOS.dwMinorVersion
lgWVerBuild = stuOS.dwBuildNumber
Case PLAT_UNKNOWN:
strWindowsName = "Unknown OS"
lgWVerMajor = 0
lgWVerMinor = 0
lgWVerBuild = 0
End Select
GetWindowsVer = 0
Exit_GetWindowsVer:
Exit Function
Error_GetWindowsVer:
GetWindowsVer = -1
Resume Exit_GetWindowsVer
End Function