VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "clsOSVersion"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit

'api declerations
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
                     (ByRef 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 Type
 
Private Const VER_PLATFORM_WIN32s = 0
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32_NT = 2

Private lngOSPlatform As Long   '1 for 9X series and 2 for NT series
Private lngOSVersion As Long
'The osversion will contain one of these values according to the results obtained
'
'0 -> Unknown
'1 -> Windows 95
'2 -> Windows 95B
'3 -> Windows 98
'4 -> Windows 98SE
'5 -> Windows ME
'6 -> Windows NT 3.51
'7 -> Winodows NT 4
'8 -> Windows 2000
'
'=======================================================================================

'get the version number of the operating system
Private Function GetOSVersion() As Long
Dim version As OSVERSIONINFO
Dim strPlatform As String

    version.dwOSVersionInfoSize = Len(version)
    GetVersionEx version

    If version.dwPlatformId = 1 And version.dwMinorVersion = 0 And LoWord(version.dwBuildNumber) = 950 Then
        lngOSVersion = 1: lngOSPlatform = 1
    ElseIf version.dwPlatformId = 1 And version.dwMinorVersion = 0 And LoWord(version.dwBuildNumber) = 1111 Then
        lngOSVersion = 2: lngOSPlatform = 1
    ElseIf version.dwPlatformId = 1 And version.dwMinorVersion = 10 And LoWord(version.dwBuildNumber) = 1998 Then
        lngOSVersion = 3: lngOSPlatform = 1
    ElseIf version.dwPlatformId = 1 And version.dwMinorVersion = 10 And LoWord(version.dwBuildNumber) = 2222 Then
        lngOSVersion = 4: lngOSPlatform = 1
    ElseIf version.dwPlatformId = 1 And version.dwMinorVersion = 90 And LoWord(version.dwBuildNumber) = 3000 Then
        lngOSVersion = 5: lngOSPlatform = 1
    End If
            
    If version.dwPlatformId = 2 And version.dwMajorVersion = 3 Then
        lngOSVersion = 6: lngOSPlatform = 2
    ElseIf version.dwPlatformId = 2 And version.dwMajorVersion = 4 Then
        lngOSVersion = 7: lngOSPlatform = 2
    ElseIf version.dwPlatformId = 2 And version.dwMajorVersion = 5 Then
        lngOSVersion = 8: lngOSPlatform = 2
    End If
    
   strPlatform = strPlatform & "v" & Format(version.dwMajorVersion) & "." & _
                       Format(version.dwMinorVersion) & " (Build " & LoWord(version.dwBuildNumber) & ")"
    
End Function

Private Function LoWord(lngIn As Long) As Integer
   If (lngIn And &HFFFF&) > &H7FFF Then
      LoWord = (lngIn And &HFFFF&) - &H10000
   Else
      LoWord = lngIn And &HFFFF&
   End If
End Function

'======================================================================
'
' All the properties return a long type signifying whether the current
' operating system is compatible with the one requested. If the return
' value is 0, it means incompatible OS, 1 means os version same, and 2
' means the os version is higher than the one requested
'
'======================================================================

Public Property Get IsWindows95(ByRef OSVersion As Long) As Long
Dim lngOSValue As Long
    lngOSValue = GetOSVersion
    If lngOSPlatform = 1 Then
        If lngOSVersion = 1 Then
            IsWindows95 = 1
        ElseIf lngOSVersion > 1 Then
            IsWindows95 = 2
            OSVersion = lngOSVersion
        Else
            IsWindows95 = 0
        End If
    Else
        IsWindows95 = 0
    End If
End Property

Public Property Get IsWindows95B(ByRef OSVersion As Long) As Long
Dim lngOSValue As Long
    lngOSValue = GetOSVersion
    If lngOSPlatform = 1 Then
        If lngOSVersion = 2 Then
            IsWindows95B = 1
        ElseIf lngOSVersion > 2 Then
            IsWindows95B = 2
            OSVersion = lngOSVersion
        Else
            IsWindows95B = 0
        End If
    Else
        IsWindows95B = 0
    End If

End Property

Public Property Get IsWindows98(ByRef OSVersion As Long) As Long
Dim lngOSValue As Long
    lngOSValue = GetOSVersion
    If lngOSPlatform = 1 Then
        If lngOSVersion = 3 Then
            IsWindows98 = 1
        ElseIf lngOSVersion > 3 Then
            IsWindows98 = 2
            OSVersion = lngOSVersion
        Else
            IsWindows98 = 0
        End If
    Else
        IsWindows98 = 0
    End If
End Property

Public Property Get IsWindows98SE(ByRef OSVersion As Long) As Long
Dim lngOSValue As Long
    lngOSValue = GetOSVersion
    If lngOSPlatform = 1 Then
        If lngOSVersion = 4 Then
            IsWindows98SE = 1
        ElseIf lngOSVersion > 4 Then
            IsWindows98SE = 2
            OSVersion = lngOSVersion
        Else
            IsWindows98SE = 0
        End If
    Else
        IsWindows98SE = 0
    End If
    
End Property

Public Property Get IsWindowsME() As Long
Dim lngOSValue As Long
    lngOSValue = GetOSVersion
    If lngOSPlatform = 1 Then
        If lngOSVersion = 5 Then
            IsWindowsME = 1
        ElseIf lngOSVersion > 5 Then
            IsWindowsME = 2
        Else
            IsWindowsME = 0
        End If
    Else
        IsWindowsME = 0
    End If
End Property

Public Property Get IsWindowsNT351() As Long
Dim lngOSValue As Long
    lngOSValue = GetOSVersion
    If lngOSPlatform = 2 Then
        If lngOSVersion = 6 Then
            IsWindowsNT351 = 1
        ElseIf lngOSVersion > 6 Then
            IsWindowsNT351 = 2
        Else
            IsWindowsNT351 = 0
        End If
    Else
        IsWindowsNT351 = 0
    End If
End Property

Public Property Get IsWindowsNT4() As Long
Dim lngOSValue As Long
    lngOSValue = GetOSVersion
    If lngOSPlatform = 2 Then
        If lngOSVersion = 7 Then
            IsWindowsNT4 = 1
        ElseIf lngOSVersion > 7 Then
            IsWindowsNT4 = 2
        Else
            IsWindowsNT4 = 0
        End If
    Else
        IsWindowsNT4 = 0
    End If
End Property

Public Property Get IsWindows2000() As Long
Dim lngOSValue As Long
    lngOSValue = GetOSVersion
    If lngOSPlatform = 2 Then
        If lngOSVersion = 8 Then
            IsWindows2000 = 1
        ElseIf lngOSVersion > 8 Then
            IsWindows2000 = 2
        Else
            IsWindows2000 = 0
        End If
    Else
        IsWindows2000 = 0
    End If
End Property

Public Property Get IsPlatformWin9X() As Boolean
    GetOSVersion
    If lngOSPlatform = 1 Then IsPlatformWin9X = True
End Property

Public Property Get IsPlatformWinNT() As Boolean
    GetOSVersion
    If lngOSPlatform = 2 Then IsPlatformWinNT = True
End Property

