Often I see examples that ask the Operating System Info to see if a DLL may exist, but usually it is just to see if NT or not. So I took it a step farther and did a lil wrapper to give me as much of the basics of what OS you are running. All the way back from Windows 3.1, to WinNT, to Vista.
So hopefully I did not miss any.
"OpSysInfo.h"
"OpSysInfo.INC"
And a Test App
"OsInfo.exe"
So hopefully I did not miss any.
"OpSysInfo.h"
Code:
'Windows < Win95 '-------------------------------------------------------------------------------- ' ' Win 3.1 'PlatformID 0 'Major Version 'Minor Version 'Build ' '-------------------------------------------------------------------------------- 'Windows 95/98/ME '-------------------------------------------------------------------------------- ' Win Win Win ' 95 98 Me ' --- --- --- 'PlatformID 1 1 1 'Major Version 4 4 4 'Minor Version 0 10 90 'Build 950* 1111 1998 ' '-------------------------------------------------------------------------------- 'Old Windows NT '-------------------------------------------------------------------------------- ' ' Win Win Win Win ' NT NT NT 2000 ' 3.0 3.1 4 ' --- --- --- ---- 'PlatformID 2 2 2 2 'Major Version 3 3 4 5 'Minor Version 0 1 0 0 'Build 1381 2195 ' '-------------------------------------------------------------------------------- 'Windows NT '-------------------------------------------------------------------------------- ' ' Win Win Win ' 2003 XP VISTA 'PlatformID 2 2 2 'Major Version 5 5 6 'Minor Version 2 1 0 'Build 3790 2600 TBD ' '-------------------------------------------------------------------------------- DECLARE SUB GetOsInfo() DECLARE FUNCTION GetWindowsOs() AS STRING DECLARE FUNCTION GetWindowsBuildNumber() AS STRING DECLARE FUNCTION GetWindowsBuildName() AS STRING DECLARE FUNCTION GetWindowsServicePack() AS STRING GLOBAL OsInfo AS OSVERSIONINFO
Code:
'************************************************************************************************************** '*** OS Info Wrapper by Cliff Nichols 11-28-07 '*** Complete list of Functions and OS values can be seen in OpSysInfo.h '************************************************************************************************************** SUB GetOsInfo() ' OsInfo.dwOSVersionInfoSize = 148 'Unsure why 148 works but %MAX_PATH comes back as 0 OsInfo.dwOSVersionInfoSize = SIZEOF(OsInfo) 'Now know this should be SIZEOF(OsInfo) ' OsInfo.szCsdVersion = SPACE$(128) OsInfo.szCsdVersion = SPACE$(SIZEOF(OsInfo)) 'Now know this should be SIZEOF(OsInfo) GetVersionEx(OsInfo) 'Get the information END SUB FUNCTION GetWindowsOs() AS STRING SELECT CASE OsInfo.dwPlatformId 'If Platform not known CASE 0 GetOsInfo 'Get the Info END SELECT SELECT CASE OsInfo.dwPlatformId CASE 0 'Platform is < Win95 FUNCTION = "Windows 3.1" CASE 1 'Platform is Win 95/98/ME SELECT CASE OsInfo.dwMajorVersion CASE 4 'Win 95/98/ME SELECT CASE OsInfo.dwMinorVersion CASE 0 'Win 95 FUNCTION = "Windows 95" CASE 10 'Win 98 FUNCTION = "Windows 98" CASE 90 'Win ME FUNCTION = "Windows ME" END SELECT END SELECT CASE 2 'Platform is Win NT 3/4/5/6 SELECT CASE OsInfo.dwMajorVersion CASE 3 'Win NT 3 SELECT CASE OsInfo.dwMinorVersion CASE 0 'Win NT 3 FUNCTION = "Windows NT 3.0" CASE 1 'Win NT 3.1 FUNCTION = "Windows NT 3.1" END SELECT CASE 4 'Win NT 4 SELECT CASE OsInfo.dwMinorVersion CASE 0 'Win NT 4 FUNCTION = "Windows NT 4.0" END SELECT CASE 5 'Win NT 5 SELECT CASE OsInfo.dwMinorVersion CASE 0 'Win 2000 FUNCTION = "Windows 2000" CASE 1 'Win XP FUNCTION = "Windows XP" CASE 2 'Windows 2003 Server" FUNCTION = "Windows 2003 Server" END SELECT CASE 6 'Win NT 6 SELECT CASE OsInfo.dwMinorVersion CASE 0 'Win Vista FUNCTION = "Windows Vista" END SELECT END SELECT END SELECT END FUNCTION FUNCTION GetWindowsBuildNumber() AS STRING SELECT CASE OsInfo.dwBuildNumber 'If Build Number not known CASE 0 GetOsInfo 'Get the Build Number END SELECT FUNCTION = STR$(OsInfo.dwBuildNumber) END FUNCTION FUNCTION GetWindowsBuildName() AS STRING SELECT CASE OsInfo.dwBuildNumber 'If Build Number not known CASE 0 GetOsInfo 'Get the Build Number END SELECT SELECT CASE OsInfo.dwBuildNumber CASE 950 'Win 95 FUNCTION = "" CASE 1111 'Win 98 OSR2 FUNCTION = STR$(OsInfo.dwBuildNumber) + " OSR2" CASE 1998 'Win ME FUNCTION = "" CASE 1381 'Win NT 4 FUNCTION = "" CASE 2195 'Win 2000 FUNCTION = "" CASE 3790 'Win 2003 Server FUNCTION = "" CASE 2600 'Win XP FUNCTION = "" END SELECT END FUNCTION FUNCTION GetWindowsServicePack() AS STRING SELECT CASE OsInfo.szCSDVersion 'If Service Pack unknownd CASE "" GetOsInfo 'Get Service Pack END SELECT FUNCTION = OsInfo.szCSDVersion END FUNCTION
"OsInfo.exe"
Code:
#COMPILE EXE #DIM ALL '------------------------------------------------------------------------------ ' ** Includes ** '------------------------------------------------------------------------------ #INCLUDE "WIN32API.INC" 'Windows API #INCLUDE "OpSysInfo.h" 'OpSysInfo Declares #INCLUDE "OpSysInfo.INC" 'OpSysInfo Functions '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Constants ** '------------------------------------------------------------------------------ %IDD_DIALOG1 = %WM_USER + 1 %IDC_LABEL1 = %WM_USER + 2 '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Declarations ** '------------------------------------------------------------------------------ DECLARE CALLBACK FUNCTION ShowDIALOG1Proc() DECLARE FUNCTION PBMAIN() DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** CallBacks ** '------------------------------------------------------------------------------ CALLBACK FUNCTION ShowDIALOG1Proc() SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG ' Initialization handler CASE %WM_NCACTIVATE STATIC hWndSaveFocus AS DWORD IF ISFALSE CBWPARAM THEN ' Save control focus hWndSaveFocus = GetFocus() ELSEIF hWndSaveFocus THEN ' Restore control focus SetFocus(hWndSaveFocus) hWndSaveFocus = 0 END IF CASE %WM_COMMAND ' Process control notifications SELECT CASE AS LONG CBCTL CASE %IDC_LABEL1 END SELECT END SELECT END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Main Application Entry Point ** '------------------------------------------------------------------------------ FUNCTION PBMAIN() ShowDIALOG1 %HWND_DESKTOP END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Dialogs ** '------------------------------------------------------------------------------ FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL OsInfo AS STRING LOCAL lRslt AS LONG LOCAL hDlg AS DWORD DIALOG NEW hParent, "Dialog1", %CW_USEDEFAULT, %CW_USEDEFAULT, 200, 40, %WS_POPUP OR _ %WS_BORDER OR %WS_DLGFRAME OR %WS_THICKFRAME OR %WS_SYSMENU OR _ %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _ %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT _ OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "Label1", 5, 0, 190, 40 '*** Show Windows Information IF GetWindowsOs <> "" THEN OsInfo = "Operating System: " + GetWindowsOs + $CR IF GetWindowsBuildNumber <> "" THEN OsInfo = OsInfo + "Build: " + GetWindowsBuildNumber + $CR IF GetWindowsBuildName <> "" THEN OsInfo = OsInfo + "Build Name: " + GetWindowsBuildName + $CR IF GetWindowsServicePack <> "" THEN OsInfo = OsInfo + "Service Pack: " + GetWindowsServicePack + $CR CONTROL SET TEXT hDlg, %IDC_LABEL1, OsInfo '*** DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt FUNCTION = lRslt END FUNCTION '------------------------------------------------------------------------------