Gustav Brock
gustav at cactus.dk
Tue Aug 31 06:57:25 CDT 2004
Hi Darren
> I used to have a little code jewel from the list tucked away in my own
> personal little archive that would allow me to determine the OS in VBA- But
> alas since the death of the laptop my personal stash has gone So....Anyone
> got any code to determine the OS and version?
We use this module:
<code>
Option Compare Database
Option Explicit
' Major Minor
' OS Platform Version Version Build
'
' Windows 95 1 4 0
' Windows 98 1 4 10 1998
' Windows 98SE 1 4 10 2222
' Windows ME 1 4 90 3000
' NT 3.51 2 3 51
' NT 2 4 0 1381
' 2000 2 5 0
' XP 2 5 1 2600
' Server 2003 2 5 2
' Code based on MS API documentation.
' 2004-07-02. Assembled by Cactus Data ApS, CPH.
Private Const VER_PLATFORM_WIN32s As Long = 0 ' Win32s on Windows 3.1x.
Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1 ' Windows 95, Windows 98, Windows ME.
Private Const VER_PLATFORM_WIN32_NT As Long = 2 ' Windows NT, Windows 2000, Windows XP, Windows Server 2003.
Private Const clngCSDVersion As Long = 128
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * clngCSDVersion
End Type
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" ( _
ByRef lpVersionInformation As OSVERSIONINFO) _
As Long
Public Function GetVersion() As String
' Retrieves version of current Windows OS.
' Returns version as full string.
'
' 2004-07-02. Cactus Data ApS, CPH.
Dim OSV As OSVERSIONINFO
Dim strVersion As String
OSV.dwOSVersionInfoSize = Len(OSV)
OSV.szCSDVersion = Space$(clngCSDVersion)
GetVersionEx OSV
With OSV
' Service Pack info string.
Debug.Print .szCSDVersion
Select Case .dwPlatformId
Case VER_PLATFORM_WIN32s ' Win32s on Windows 3.1x.
strVersion = "Windows 3.1"
Case VER_PLATFORM_WIN32_WINDOWS ' Windows 95, Windows 98,
Select Case .dwMinorVersion ' Windows ME.
Case 0
strVersion = "Windows 95"
Case 10
If (.dwBuildNumber And &HFFFF&) = 2222 Then
strVersion = "Windows 98SE"
Else
strVersion = "Windows 98"
End If
Case 90
strVersion = "Windows ME"
End Select
Case VER_PLATFORM_WIN32_NT ' Windows NT, Windows 2000, Windows XP,
Select Case .dwMajorVersion ' Windows Server 2003.
Case 3
strVersion = "Windows NT 3.51"
Case 4
strVersion = "Windows NT 4.0"
Case 5
Select Case .dwMinorVersion
Case 0
strVersion = "Windows 2000"
Case 1
strVersion = "Windows XP"
Case 2
strVersion = "Windows Server 2003"
End Select
End Select
Case Else
strVersion = "Unknown"
End Select
End With
GetVersion = strVersion
End Function
Public Function IsWinXP() As Boolean
' Checks current Windows OS.
' Returns True if OS is Win XP or Server 2003.
'
' 2004-07-07. Cactus Data ApS, CPH.
Dim OSV As OSVERSIONINFO
Dim booVersion As Boolean
OSV.dwOSVersionInfoSize = Len(OSV)
GetVersionEx OSV
With OSV
Select Case .dwPlatformId
Case VER_PLATFORM_WIN32_NT ' Windows NT, Windows 2000, Windows XP,
Select Case .dwMajorVersion ' Windows Server 2003.
Case 5
Select Case .dwMinorVersion
Case 0
' strVersion = "Windows 2000"
Case 1
' strVersion = "Windows XP"
booVersion = True
Case 2
' strVersion = "Windows Server 2003"
booVersion = True
End Select
End Select
End Select
End With
IsWinXP = booVersion
End Function
</code>
Have fun!
/gustav