Option Explicit On Option Strict Off Option Compare Binary Module modOS_Info '============================================================================================================= ' ' modOS_Info Module ' ----------------- ' ' Created By : Kevin Wilson ' http://www.TheVBZone.com ( The VB Zone ) ' http://www.TheVBZone.net ( The VB Zone .net ) ' ' Created On : April 01, 2000 ' Last Update : December 16, 2003 ' ' VB Versions : .NET v1.1 ' ' Requires : Reference to the "System.Management" Library ' ' Description : This module was created to easily find out what operating system the user is running the ' program on, as well as information about the OS's description and build information. ' ' See Also : http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B304283 ' http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemOperatingSystemMembersTopic.asp ' http://msdn.microsoft.com/library/en-us/sysinfo/base/osversioninfo_str.asp ' ' Example Use : ' ' Call GetOS ' If Win_OS = OSTypes.OS_WinNT_351 Then ' MsgBox "It's time to upgrade your operating system!" ' End If ' '============================================================================================================= ' ' LEGAL: ' ' You are free to use this code as long as you keep the above heading information intact and unchanged. Credit ' given where credit is due. Also, it is not required, but it would be appreciated if you would mention ' somewhere in your compiled program that that your program makes use of code written and distributed by ' Kevin Wilson (www.TheVBZone.com). Feel free to link to this code via your web site or articles. ' ' You may NOT take this code and pass it off as your own. You may NOT distribute this code on your own server ' or web site. You may NOT take code created by Kevin Wilson (www.TheVBZone.com) and use it to create products, ' utilities, or applications that directly compete with products, utilities, and applications created by Kevin ' Wilson, TheVBZone.com, or Wilson Media. You may NOT take this code and sell it for profit without first ' obtaining the written consent of the author Kevin Wilson. ' ' These conditions are subject to change at the discretion of the owner Kevin Wilson at any time without ' warning or notice. Copyright© by Kevin Wilson. All rights reserved. '============================================================================================================= #Region "Public Enumerations" Public Enum OSTypes OS_Unknown = 0 ' "Unknown" OS_Win32 = 32 ' "Win 32" OS_Win95 = 95 ' "Windows 95" OS_Win98 = 98 ' "Windows 98" OS_WinME = 99 ' "Windows ME" OS_WinNT_351 = 351 ' "Windows NT 3.51" OS_WinNT_40 = 40 ' "Windows NT 4.0" OS_Win2000 = 2000 ' "Windows 2000" OS_WinXP = 50 ' "Windows XP" OS_Win2003 = 2003 ' "Windows Server 2003 family" OS_WinCE = 10 ' "Windows CE" End Enum #End Region #Region "Private Structures" Private Structure OSVERSIONINFO Public dwOSVersionInfoSize As Int32 '// DWORD Size of this data structure, in bytes. Set this member to sizeof(OSVERSIONINFO) before calling the GetVersionEx function. Public dwMajorVersion As Int32 '// DWORD Major version number of the operating system. This member can be one of the following values: Win95 = 4, Win98 = 4, WinMe = 4, WinNT 3.51 = 3, WinNT 4.0 = 4, Win2000 = 5, WinXP = 5, Win2003 Server Family = 5 Public dwMinorVersion As Int32 '// DWORD Minor version number of the operating system. This member can be one of the following values: Win95 = 0, Win98 = 10, WinMe = 90, WinNT 3.51 = 51, WinNT 4.0 = 0, Win2000 = 0, WinXP = 1, Win2003 Server Family = 2 Public dwBuildNumber As Int32 '// DWORD Build number of the operating system. Windows Me/98/95: The low-order word contains the build number of the operating. The high-order word contains the major and minor version numbers. Public dwPlatformId As Int32 '// DWORD Operating system platform. This member can be one of the following values: VER_PLATFORM_WIN32s = Win32s on Windows 3.1, VER_PLATFORM_WIN32_WINDOWS = Windows 95/Windows 98/Windows Me, VER_PLATFORM_WIN32_NT = Windows NT/Windows 2000/Windows XP/Windows 2003 Server Family Public szCSDVersion001 As Byte '// TCHAR[128] Pointer to a null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty. Windows Me/98/95: Pointer to a null-terminated string that indicates additional version information. For example, " C" indicates Windows 95 OSR2 and " A" indicates Windows 98 Second Edition. Public szCSDVersion002 As Byte Public szCSDVersion003 As Byte Public szCSDVersion004 As Byte Public szCSDVersion005 As Byte Public szCSDVersion006 As Byte Public szCSDVersion007 As Byte Public szCSDVersion008 As Byte Public szCSDVersion009 As Byte Public szCSDVersion010 As Byte Public szCSDVersion011 As Byte Public szCSDVersion012 As Byte Public szCSDVersion013 As Byte Public szCSDVersion014 As Byte Public szCSDVersion015 As Byte Public szCSDVersion016 As Byte Public szCSDVersion017 As Byte Public szCSDVersion018 As Byte Public szCSDVersion019 As Byte Public szCSDVersion020 As Byte Public szCSDVersion021 As Byte Public szCSDVersion022 As Byte Public szCSDVersion023 As Byte Public szCSDVersion024 As Byte Public szCSDVersion025 As Byte Public szCSDVersion026 As Byte Public szCSDVersion027 As Byte Public szCSDVersion028 As Byte Public szCSDVersion029 As Byte Public szCSDVersion030 As Byte Public szCSDVersion031 As Byte Public szCSDVersion032 As Byte Public szCSDVersion033 As Byte Public szCSDVersion034 As Byte Public szCSDVersion035 As Byte Public szCSDVersion036 As Byte Public szCSDVersion037 As Byte Public szCSDVersion038 As Byte Public szCSDVersion039 As Byte Public szCSDVersion040 As Byte Public szCSDVersion041 As Byte Public szCSDVersion042 As Byte Public szCSDVersion043 As Byte Public szCSDVersion044 As Byte Public szCSDVersion045 As Byte Public szCSDVersion046 As Byte Public szCSDVersion047 As Byte Public szCSDVersion048 As Byte Public szCSDVersion049 As Byte Public szCSDVersion050 As Byte Public szCSDVersion051 As Byte Public szCSDVersion052 As Byte Public szCSDVersion053 As Byte Public szCSDVersion054 As Byte Public szCSDVersion055 As Byte Public szCSDVersion056 As Byte Public szCSDVersion057 As Byte Public szCSDVersion058 As Byte Public szCSDVersion059 As Byte Public szCSDVersion060 As Byte Public szCSDVersion061 As Byte Public szCSDVersion062 As Byte Public szCSDVersion063 As Byte Public szCSDVersion064 As Byte Public szCSDVersion065 As Byte Public szCSDVersion066 As Byte Public szCSDVersion067 As Byte Public szCSDVersion068 As Byte Public szCSDVersion069 As Byte Public szCSDVersion070 As Byte Public szCSDVersion071 As Byte Public szCSDVersion072 As Byte Public szCSDVersion073 As Byte Public szCSDVersion074 As Byte Public szCSDVersion075 As Byte Public szCSDVersion076 As Byte Public szCSDVersion077 As Byte Public szCSDVersion078 As Byte Public szCSDVersion079 As Byte Public szCSDVersion080 As Byte Public szCSDVersion081 As Byte Public szCSDVersion082 As Byte Public szCSDVersion083 As Byte Public szCSDVersion084 As Byte Public szCSDVersion085 As Byte Public szCSDVersion086 As Byte Public szCSDVersion087 As Byte Public szCSDVersion088 As Byte Public szCSDVersion089 As Byte Public szCSDVersion090 As Byte Public szCSDVersion091 As Byte Public szCSDVersion092 As Byte Public szCSDVersion093 As Byte Public szCSDVersion094 As Byte Public szCSDVersion095 As Byte Public szCSDVersion096 As Byte Public szCSDVersion097 As Byte Public szCSDVersion098 As Byte Public szCSDVersion099 As Byte Public szCSDVersion100 As Byte Public szCSDVersion101 As Byte Public szCSDVersion102 As Byte Public szCSDVersion103 As Byte Public szCSDVersion104 As Byte Public szCSDVersion105 As Byte Public szCSDVersion106 As Byte Public szCSDVersion107 As Byte Public szCSDVersion108 As Byte Public szCSDVersion109 As Byte Public szCSDVersion110 As Byte Public szCSDVersion111 As Byte Public szCSDVersion112 As Byte Public szCSDVersion113 As Byte Public szCSDVersion114 As Byte Public szCSDVersion115 As Byte Public szCSDVersion116 As Byte Public szCSDVersion117 As Byte Public szCSDVersion118 As Byte Public szCSDVersion119 As Byte Public szCSDVersion120 As Byte Public szCSDVersion121 As Byte Public szCSDVersion122 As Byte Public szCSDVersion123 As Byte Public szCSDVersion124 As Byte Public szCSDVersion125 As Byte Public szCSDVersion126 As Byte Public szCSDVersion127 As Byte Public szCSDVersion128 As Byte End Structure #End Region #Region "Private Constants" Private Const VER_PLATFORM_WIN32s = 0 Private Const VER_PLATFORM_WIN32_WINDOWS = 1 Private Const VER_PLATFORM_WIN32_NT = 2 #End Region #Region "Public Variable Declarations" Public Win_OS As OSTypes Public Win_Description As String Public Win_Version As String Public Win_SP As String Public Win_Build As String Public Win_RAM As String #End Region #Region "Win32 API Function Declarations" Private Declare Function GetVersionEx Lib "KERNEL32.DLL" Alias "GetVersionExA" (ByRef lpVersionInfo As OSVERSIONINFO) As Int32 'BOOL #End Region #Region "Public Functions" ' Function to set the windows information variables (USING ONLY .NET). ' * WARNING: I have seen this function fail to correctly return information for Win98 systems. Public Function GetOsEx(Optional ByRef Return_ErrNum As Integer = 0, Optional ByRef Return_ErrSrc As String = "", Optional ByRef Return_ErrDesc As String = "") As Boolean On Error GoTo ErrorTrap Dim OSInfo As System.OperatingSystem Dim strDesc As String ' Set return values to default Win_OS = OSTypes.OS_Unknown Win_Description = "" Win_Version = "" Win_Build = "" Return_ErrNum = 0 Return_ErrSrc = "" Return_ErrDesc = "" ' Get the system's memory Win_RAM = GetInstalledRAM() ' Get the operating system info OSInfo = Environment.OSVersion ' Check the results With OSInfo Select Case .Platform ' Win32s Case PlatformID.Win32S 'VER_PLATFORM_WIN32s strDesc = "Win 32" Win_OS = OSTypes.OS_Win32 ' Windows 9x Case PlatformID.Win32Windows 'VER_PLATFORM_WIN32_WINDOWS If .Version.Minor = 0 Then strDesc = "Windows 95" Win_OS = OSTypes.OS_Win95 ElseIf .Version.Minor = 10 Then If .Version.Revision.ToString.ToUpper = "2222A" Then strDesc = "Windows 98 SE" Win_OS = OSTypes.OS_Win98 Else strDesc = "Windows 98" Win_OS = OSTypes.OS_Win98 End If ElseIf .Version.Minor = 90 Then strDesc = "Windows ME" Win_OS = OSTypes.OS_WinME Else strDesc = "Unknown" Win_OS = OSTypes.OS_Unknown End If ' Windows NT Family Case PlatformID.Win32NT 'VER_PLATFORM_WIN32_NT If .Version.Major = 3 Then strDesc = "Windows NT 3.51" Win_OS = OSTypes.OS_WinNT_351 ElseIf .Version.Major = 4 Then strDesc = "Windows NT 4.0" Win_OS = OSTypes.OS_WinNT_40 ElseIf .Version.Major = 5 Then If .Version.Minor = 0 Then strDesc = "Windows 2000" Win_OS = OSTypes.OS_Win2000 ElseIf .Version.Minor = 1 Then strDesc = "Windows XP" Win_OS = OSTypes.OS_WinXP ElseIf .Version.Minor = 2 Then strDesc = "Windows Server 2003 Family" Win_OS = OSTypes.OS_Win2003 Else strDesc = "Unknown" Win_OS = OSTypes.OS_Unknown End If End If ' Windows CE Case PlatformID.WinCE strDesc = "Windows CE" Win_OS = OSTypes.OS_WinCE ' Unknown Case Else strDesc = "Unknown" Win_OS = OSTypes.OS_Unknown End Select End With ' Return the information Win_Description = strDesc Win_SP = GetServicePack() Win_Version = CStr(OSInfo.Version.Major) & "." & CStr(OSInfo.Version.Minor) Select Case Win_OS Case OSTypes.OS_Win95, OSTypes.OS_Win98, OSTypes.OS_WinME Win_Build = CStr(Val("&H" & Right("0000" & Hex(OSInfo.Version.Build), 4))) Case Else Win_Build = CStr(OSInfo.Version.Build) End Select Return True ErrorTrap: Return_ErrNum = Err.Number Return_ErrSrc = Err.Source Return_ErrDesc = Err.Description Err.Clear() Return False End Function ' Function to set the windows information variables (USING THE WIN32 API) Public Function GetOs(Optional ByRef Return_ErrNum As Integer = 0, Optional ByRef Return_ErrSrc As String = "", Optional ByRef Return_ErrDesc As String = "") As Boolean On Error GoTo ErrorTrap Dim OSInfo As OSVERSIONINFO Dim strDesc As String ' Set return values to default Win_OS = OSTypes.OS_Unknown Win_Description = "" Win_Version = "" Win_Build = "" Return_ErrNum = 0 Return_ErrSrc = "" Return_ErrDesc = "" ' Get the system's memory Win_RAM = GetInstalledRAM() ' Call the API that returns the Windows version OSInfo = New OSVERSIONINFO OSInfo.dwOSVersionInfoSize = 148 'Len(OSInfo) If GetVersionEx(OSInfo) = 0 Then Return_ErrNum = Err.LastDllError Return_ErrSrc = "GetVersionEx(..)" Return_ErrDesc = "Failed to successfully get the OS version information" Err.Clear() GetOS = False Exit Function End If ' Check the results With OSInfo Select Case .dwPlatformId ' Win32s Case VER_PLATFORM_WIN32s strDesc = "Win 32" Win_OS = OSTypes.OS_Win32 ' Windows 9x Case VER_PLATFORM_WIN32_WINDOWS If .dwMinorVersion = 0 Then strDesc = "Windows 95" Win_OS = OSTypes.OS_Win95 ElseIf .dwMinorVersion = 10 Then strDesc = "Windows 98" Win_OS = OSTypes.OS_Win98 ElseIf .dwMinorVersion = 90 Then strDesc = "Windows ME" Win_OS = OSTypes.OS_WinME Else strDesc = "Unknown" Win_OS = OSTypes.OS_Unknown End If ' Windows NT Family Case VER_PLATFORM_WIN32_NT If .dwMajorVersion = 3 Then strDesc = "Windows NT 3.51" Win_OS = OSTypes.OS_WinNT_351 ElseIf .dwMajorVersion = 4 Then strDesc = "Windows NT 4.0" Win_OS = OSTypes.OS_WinNT_40 ElseIf .dwMajorVersion = 5 Then If .dwMinorVersion = 0 Then strDesc = "Windows 2000" Win_OS = OSTypes.OS_Win2000 ElseIf .dwMinorVersion = 1 Then strDesc = "Windows XP" Win_OS = OSTypes.OS_WinXP ElseIf .dwMinorVersion = 2 Then strDesc = "Windows Server 2003 Family" Win_OS = OSTypes.OS_Win2003 Else strDesc = "Unknown" Win_OS = OSTypes.OS_Unknown End If End If ' Unknown Case Else strDesc = "Unknown" Win_OS = OSTypes.OS_Unknown End Select End With ' Return the information Win_Description = strDesc Win_SP = GetDescription(OSInfo) Win_Version = CStr(OSInfo.dwMajorVersion) & "." & CStr(OSInfo.dwMinorVersion) Select Case Win_OS Case OSTypes.OS_Win95, OSTypes.OS_Win98, OSTypes.OS_WinME Win_Build = CStr(Val("&H" & Right("0000" & Hex(OSInfo.dwBuildNumber), 4))) Case Else Win_Build = CStr(OSInfo.dwBuildNumber) End Select Return True ErrorTrap: Return_ErrNum = Err.Number Return_ErrSrc = Err.Source Return_ErrDesc = Err.Description Err.Clear() Return False End Function #End Region #Region "Private Helper Functions" ' This function requires a reference to the "System.Management" library Private Function GetServicePack() As String Dim objQuery As New Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem") Dim objSearcher As New Management.ManagementObjectSearcher(objQuery) Dim objMngObj As Management.ManagementObject For Each objMngObj In objSearcher.Get GetServicePack = "Service Pack " & objMngObj("ServicePackMajorVersion").ToString & "." & objMngObj("ServicePackMinorVersion").ToString Next objMngObj objSearcher = Nothing objQuery = Nothing End Function ' This function requires you to include a reference to the "System.Management" library Private Function GetInstalledRAM() As String Const MEM_KB As Integer = 1024 Const MEM_MB As Integer = MEM_KB * MEM_KB Dim objQuery As New Management.ObjectQuery("SELECT * FROM Win32_PhysicalMemory") Dim objSearcher As New Management.ManagementObjectSearcher(objQuery) Dim objMngObj As Management.ManagementObject Dim dlbTotalMem As Double For Each objMngObj In objSearcher.Get dlbTotalMem = dlbTotalMem + CDbl(objMngObj("Capacity").ToString) Next GetInstalledRAM = (dlbTotalMem \ MEM_MB) & " MB" objSearcher = Nothing objQuery = Nothing End Function Private Function GetDescription(ByRef OsVerInfo As OSVERSIONINFO) As String GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion001 <> 0, Chr(OsVerInfo.szCSDVersion001), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion002 <> 0, Chr(OsVerInfo.szCSDVersion002), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion003 <> 0, Chr(OsVerInfo.szCSDVersion003), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion004 <> 0, Chr(OsVerInfo.szCSDVersion004), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion005 <> 0, Chr(OsVerInfo.szCSDVersion005), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion006 <> 0, Chr(OsVerInfo.szCSDVersion006), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion007 <> 0, Chr(OsVerInfo.szCSDVersion007), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion008 <> 0, Chr(OsVerInfo.szCSDVersion008), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion009 <> 0, Chr(OsVerInfo.szCSDVersion009), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion010 <> 0, Chr(OsVerInfo.szCSDVersion010), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion011 <> 0, Chr(OsVerInfo.szCSDVersion011), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion012 <> 0, Chr(OsVerInfo.szCSDVersion012), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion013 <> 0, Chr(OsVerInfo.szCSDVersion013), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion014 <> 0, Chr(OsVerInfo.szCSDVersion014), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion015 <> 0, Chr(OsVerInfo.szCSDVersion015), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion016 <> 0, Chr(OsVerInfo.szCSDVersion016), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion017 <> 0, Chr(OsVerInfo.szCSDVersion017), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion018 <> 0, Chr(OsVerInfo.szCSDVersion018), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion019 <> 0, Chr(OsVerInfo.szCSDVersion019), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion020 <> 0, Chr(OsVerInfo.szCSDVersion020), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion021 <> 0, Chr(OsVerInfo.szCSDVersion021), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion022 <> 0, Chr(OsVerInfo.szCSDVersion022), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion023 <> 0, Chr(OsVerInfo.szCSDVersion023), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion024 <> 0, Chr(OsVerInfo.szCSDVersion024), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion025 <> 0, Chr(OsVerInfo.szCSDVersion025), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion026 <> 0, Chr(OsVerInfo.szCSDVersion026), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion027 <> 0, Chr(OsVerInfo.szCSDVersion027), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion028 <> 0, Chr(OsVerInfo.szCSDVersion028), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion029 <> 0, Chr(OsVerInfo.szCSDVersion029), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion030 <> 0, Chr(OsVerInfo.szCSDVersion030), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion031 <> 0, Chr(OsVerInfo.szCSDVersion031), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion032 <> 0, Chr(OsVerInfo.szCSDVersion032), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion033 <> 0, Chr(OsVerInfo.szCSDVersion033), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion034 <> 0, Chr(OsVerInfo.szCSDVersion034), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion035 <> 0, Chr(OsVerInfo.szCSDVersion035), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion036 <> 0, Chr(OsVerInfo.szCSDVersion036), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion037 <> 0, Chr(OsVerInfo.szCSDVersion037), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion038 <> 0, Chr(OsVerInfo.szCSDVersion038), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion039 <> 0, Chr(OsVerInfo.szCSDVersion039), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion040 <> 0, Chr(OsVerInfo.szCSDVersion040), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion041 <> 0, Chr(OsVerInfo.szCSDVersion041), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion042 <> 0, Chr(OsVerInfo.szCSDVersion042), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion043 <> 0, Chr(OsVerInfo.szCSDVersion043), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion044 <> 0, Chr(OsVerInfo.szCSDVersion044), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion045 <> 0, Chr(OsVerInfo.szCSDVersion045), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion046 <> 0, Chr(OsVerInfo.szCSDVersion046), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion047 <> 0, Chr(OsVerInfo.szCSDVersion047), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion048 <> 0, Chr(OsVerInfo.szCSDVersion048), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion049 <> 0, Chr(OsVerInfo.szCSDVersion049), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion050 <> 0, Chr(OsVerInfo.szCSDVersion050), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion051 <> 0, Chr(OsVerInfo.szCSDVersion051), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion052 <> 0, Chr(OsVerInfo.szCSDVersion052), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion053 <> 0, Chr(OsVerInfo.szCSDVersion053), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion054 <> 0, Chr(OsVerInfo.szCSDVersion054), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion055 <> 0, Chr(OsVerInfo.szCSDVersion055), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion056 <> 0, Chr(OsVerInfo.szCSDVersion056), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion057 <> 0, Chr(OsVerInfo.szCSDVersion057), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion058 <> 0, Chr(OsVerInfo.szCSDVersion058), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion059 <> 0, Chr(OsVerInfo.szCSDVersion059), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion060 <> 0, Chr(OsVerInfo.szCSDVersion060), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion061 <> 0, Chr(OsVerInfo.szCSDVersion061), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion062 <> 0, Chr(OsVerInfo.szCSDVersion062), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion063 <> 0, Chr(OsVerInfo.szCSDVersion063), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion064 <> 0, Chr(OsVerInfo.szCSDVersion064), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion065 <> 0, Chr(OsVerInfo.szCSDVersion065), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion066 <> 0, Chr(OsVerInfo.szCSDVersion066), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion067 <> 0, Chr(OsVerInfo.szCSDVersion067), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion068 <> 0, Chr(OsVerInfo.szCSDVersion068), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion069 <> 0, Chr(OsVerInfo.szCSDVersion069), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion070 <> 0, Chr(OsVerInfo.szCSDVersion070), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion071 <> 0, Chr(OsVerInfo.szCSDVersion071), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion072 <> 0, Chr(OsVerInfo.szCSDVersion072), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion073 <> 0, Chr(OsVerInfo.szCSDVersion073), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion074 <> 0, Chr(OsVerInfo.szCSDVersion074), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion075 <> 0, Chr(OsVerInfo.szCSDVersion075), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion076 <> 0, Chr(OsVerInfo.szCSDVersion076), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion077 <> 0, Chr(OsVerInfo.szCSDVersion077), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion078 <> 0, Chr(OsVerInfo.szCSDVersion078), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion079 <> 0, Chr(OsVerInfo.szCSDVersion079), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion080 <> 0, Chr(OsVerInfo.szCSDVersion080), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion081 <> 0, Chr(OsVerInfo.szCSDVersion081), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion082 <> 0, Chr(OsVerInfo.szCSDVersion082), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion083 <> 0, Chr(OsVerInfo.szCSDVersion083), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion084 <> 0, Chr(OsVerInfo.szCSDVersion084), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion085 <> 0, Chr(OsVerInfo.szCSDVersion085), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion086 <> 0, Chr(OsVerInfo.szCSDVersion086), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion087 <> 0, Chr(OsVerInfo.szCSDVersion087), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion088 <> 0, Chr(OsVerInfo.szCSDVersion088), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion089 <> 0, Chr(OsVerInfo.szCSDVersion089), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion090 <> 0, Chr(OsVerInfo.szCSDVersion090), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion091 <> 0, Chr(OsVerInfo.szCSDVersion091), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion092 <> 0, Chr(OsVerInfo.szCSDVersion092), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion093 <> 0, Chr(OsVerInfo.szCSDVersion093), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion094 <> 0, Chr(OsVerInfo.szCSDVersion094), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion095 <> 0, Chr(OsVerInfo.szCSDVersion095), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion096 <> 0, Chr(OsVerInfo.szCSDVersion096), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion097 <> 0, Chr(OsVerInfo.szCSDVersion097), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion098 <> 0, Chr(OsVerInfo.szCSDVersion098), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion099 <> 0, Chr(OsVerInfo.szCSDVersion099), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion100 <> 0, Chr(OsVerInfo.szCSDVersion100), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion101 <> 0, Chr(OsVerInfo.szCSDVersion101), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion102 <> 0, Chr(OsVerInfo.szCSDVersion102), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion103 <> 0, Chr(OsVerInfo.szCSDVersion103), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion104 <> 0, Chr(OsVerInfo.szCSDVersion104), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion105 <> 0, Chr(OsVerInfo.szCSDVersion105), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion106 <> 0, Chr(OsVerInfo.szCSDVersion106), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion107 <> 0, Chr(OsVerInfo.szCSDVersion107), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion108 <> 0, Chr(OsVerInfo.szCSDVersion108), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion109 <> 0, Chr(OsVerInfo.szCSDVersion109), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion110 <> 0, Chr(OsVerInfo.szCSDVersion110), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion111 <> 0, Chr(OsVerInfo.szCSDVersion111), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion112 <> 0, Chr(OsVerInfo.szCSDVersion112), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion113 <> 0, Chr(OsVerInfo.szCSDVersion113), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion114 <> 0, Chr(OsVerInfo.szCSDVersion114), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion115 <> 0, Chr(OsVerInfo.szCSDVersion115), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion116 <> 0, Chr(OsVerInfo.szCSDVersion116), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion117 <> 0, Chr(OsVerInfo.szCSDVersion117), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion118 <> 0, Chr(OsVerInfo.szCSDVersion118), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion119 <> 0, Chr(OsVerInfo.szCSDVersion119), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion120 <> 0, Chr(OsVerInfo.szCSDVersion120), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion121 <> 0, Chr(OsVerInfo.szCSDVersion121), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion122 <> 0, Chr(OsVerInfo.szCSDVersion122), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion123 <> 0, Chr(OsVerInfo.szCSDVersion123), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion124 <> 0, Chr(OsVerInfo.szCSDVersion124), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion125 <> 0, Chr(OsVerInfo.szCSDVersion125), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion126 <> 0, Chr(OsVerInfo.szCSDVersion126), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion127 <> 0, Chr(OsVerInfo.szCSDVersion127), "") GetDescription = GetDescription & IIf(OsVerInfo.szCSDVersion128 <> 0, Chr(OsVerInfo.szCSDVersion128), "") End Function Private Function StringAdd(ByVal Number As Integer, ByVal Character As Char) As String Dim iCounter As Integer If Number < 1 Then Return "" For iCounter = 1 To Number StringAdd = StringAdd & Character Next End Function #End Region #Region "Sample Code" ' OSVERSIONINFOEX osvi; ' BOOL bOsVersionInfoEx; ' ' // Try calling GetVersionEx using the OSVERSIONINFOEX structure. ' // If that fails, try using the OSVERSIONINFO structure. ' ' ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); ' osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); ' ' if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) ' { ' osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); ' if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) ' return FALSE; ' } ' ' switch (osvi.dwPlatformId) ' { ' // Test for the Windows NT product family. ' case VER_PLATFORM_WIN32_NT: ' ' // Test for the specific product family. ' if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) ' printf ("Microsoft Windows Server 2003 family, "); ' ' if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) ' printf ("Microsoft Windows XP "); ' ' if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) ' printf ("Microsoft Windows 2000 "); ' ' if ( osvi.dwMajorVersion <= 4 ) ' printf("Microsoft Windows NT "); ' ' // Test for specific product on Windows NT 4.0 SP6 and later. ' if( bOsVersionInfoEx ) ' { ' // Test for the workstation type. ' if ( osvi.wProductType == VER_NT_WORKSTATION ) ' { ' if( osvi.dwMajorVersion == 4 ) ' printf ( "Workstation 4.0 " ); ' else if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) ' printf ( "Home Edition " ); ' else ' printf ( "Professional " ); ' } ' ' // Test for the server type. ' else if ( osvi.wProductType == VER_NT_SERVER ) ' { ' if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) ' { ' if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) ' printf ( "Datacenter Edition " ); ' else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) ' printf ( "Enterprise Edition " ); ' else if ( osvi.wSuiteMask == VER_SUITE_BLADE ) ' printf ( "Web Edition " ); ' else ' printf ( "Standard Edition " ); ' } ' ' else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) ' { ' if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) ' printf ( "Datacenter Server " ); ' else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) ' printf ( "Advanced Server " ); ' else ' printf ( "Server " ); ' } ' ' else // Windows NT 4.0 ' { ' if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) ' printf ("Server 4.0, Enterprise Edition " ); ' else ' printf ( "Server 4.0 " ); ' } ' } ' } ' else // Test for specific product on Windows NT 4.0 SP5 and earlier ' { ' HKEY hKey; ' char szProductType[BUFSIZE]; ' DWORD dwBufLen=BUFSIZE; ' LONG lRet; ' ' lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, ' "SYSTEM\\CurrentControlSet\\Control\\ProductOptions", ' 0, KEY_QUERY_VALUE, &hKey ); ' if( lRet != ERROR_SUCCESS ) ' return FALSE; ' ' lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL, ' (LPBYTE) szProductType, &dwBufLen); ' if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) ) ' return FALSE; ' ' RegCloseKey( hKey ); ' ' if ( lstrcmpi( "WINNT", szProductType) == 0 ) ' printf( "Workstation " ); ' if ( lstrcmpi( "LANMANNT", szProductType) == 0 ) ' printf( "Server " ); ' if ( lstrcmpi( "SERVERNT", szProductType) == 0 ) ' printf( "Advanced Server " ); ' ' printf( "%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion ); ' } ' ' // Display service pack (if any) and build number. ' ' if( osvi.dwMajorVersion == 4 && ' lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 ) ' { ' HKEY hKey; ' LONG lRet; ' ' // Test for SP6 versus SP6a. ' lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, ' "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009", ' 0, KEY_QUERY_VALUE, &hKey ); ' if( lRet == ERROR_SUCCESS ) ' printf( "Service Pack 6a (Build %d)\n", osvi.dwBuildNumber & 0xFFFF ); ' else // Windows NT 4.0 prior to SP6a ' { ' printf( "%s (Build %d)\n", ' osvi.szCSDVersion, ' osvi.dwBuildNumber & 0xFFFF); ' } ' ' RegCloseKey( hKey ); ' } ' else // Windows NT 3.51 and earlier or Windows 2000 and later ' { ' printf( "%s (Build %d)\n", ' osvi.szCSDVersion, ' osvi.dwBuildNumber & 0xFFFF); ' } ' ' break; ' ' // Test for the Windows 95 product family. ' case VER_PLATFORM_WIN32_WINDOWS: ' ' if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) ' { ' printf ("Microsoft Windows 95 "); ' if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' ) ' printf("OSR2 " ); ' } ' ' if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) ' { ' printf ("Microsoft Windows 98 "); ' if ( osvi.szCSDVersion[1] == 'A' ) ' printf("SE " ); ' } ' ' if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) ' { ' printf ("Microsoft Windows Millennium Edition\n"); ' } ' break; ' ' case VER_PLATFORM_WIN32s: ' ' printf ("Microsoft Win32s\n"); ' break; ' } ' return TRUE; #End Region End Module