Round about Windowsversion

Share your advanced PureBasic knowledge/code with the community.
Rudi Seitz
New User
New User
Posts: 2
Joined: Wed Mar 16, 2011 11:33 am

Round about Windowsversion

Post by Rudi Seitz »

;//////////////////////////////////////////////////////////////////////////////////////////////////
Declare.l IsWindows64bit() ; 16.03.2011 ;//
Declare.l IsWindowsServer() ; 16.03.2011 ;//
Declare.l GetWindowsType() ; 16.03.2011 ;//
Declare.l GetWindowsBuild() ; 16.03.2011 ;//
Declare.s Windows64BitString() ; 16.03.2011 ;//
Declare.s WindowsServerString() ; 16.03.2011 ;//
Declare.s WindowsVersionString() ; 16.03.2011 ;//
;//////////////////////////////////////////////////////////////////////////////////////////////////
#_Windows_2008SRV_R2 = -4 ;//
#_Windows_2008SRV = -3 ;//
#_Windows_2003SRV = -2 ;//
#_Windows_2000SRV = -1 ;//
#_Windows_Unbekannt = 0 ;//
#_Windows_2000 = 1 ;//
#_Windows_XP = 2 ;//
#_Windows_Vista = 3 ;//
#_Windows_7 = 4 ;//
;//////////////////////////////////////////////////////////////////////////////////////////////////
;/ Getestet unter ..: Windows XP Professional, 32-BIT ;//
;/ Windows Vista Enterprise, 32-BIT ;//
;/ Windows Vista Professional, 32-BIT ;//
;/ Windows 7 Ultimate, 32-BIT ;//
;/ Windows 7 Ultimate, 64-BIT ;//
;/ Windows 7 Professional, 32-BIT ;//
;/ Windows 2003 Server, 32-BIT (SBS) ;//
;//////////////////////////////////////////////////////////////////////////////////////////////////
;/ Hinweis .........: Die Windowsfunktionen "GetVersionEx" und "IsWow64Process" existieren erst ;//
;/ ab Windows 2000 / Windows 2000 Server, deshalb macht der Versuch ältere ;//
;/ Windowsversionen auf diese Art zu erkennen, keinen Sinn. ;//
;//////////////////////////////////////////////////////////////////////////////////////////////////
Procedure.l IsWindows64bit() ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;————————————————————————————————————————————————————————————————————————————————————————————————
Protected P_Back.l
Protected *P_Adresse
Protected P_LID.l = OpenLibrary( #PB_Any, "KERNEL32.DLL")
;————————————————————————————————————————————————————————————————————————————————————————————————
If P_LID
*P_Adresse = GetFunction( P_LID, "IsWow64Process")
If *P_Adresse
If CallFunctionFast( *P_Adresse, GetCurrentProcess_(), @P_Back ) = 0 : P_Back = #False : EndIf
EndIf
CloseLibrary( P_LID )
EndIf
;————————————————————————————————————————————————————————————————————————————————————————————————
ProcedureReturn P_Back
;————————————————————————————————————————————————————————————————————————————————————————————————
EndProcedure ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Procedure.l IsWindowsServer() ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;————————————————————————————————————————————————————————————————————————————————————————————————
Protected P_Back.l = #True
Protected P_Info.OSVERSIONINFOEX
P_Info\dwOSVersionInfoSize = SizeOf( OSVERSIONINFOEX )
;————————————————————————————————————————————————————————————————————————————————————————————————
If GetVersionEx_( @P_Info )
If P_Info\wProductType = #VER_NT_WORKSTATION : P_Back = #False : EndIf
EndIf
;————————————————————————————————————————————————————————————————————————————————————————————————
ProcedureReturn P_Back
;————————————————————————————————————————————————————————————————————————————————————————————————
EndProcedure ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Procedure.l GetWindowsType() ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;————————————————————————————————————————————————————————————————————————————————————————————————
Protected P_Info.OSVERSIONINFOEX
Protected P_Back.l = #_Windows_Unbekannt
P_Info\dwOSVersionInfoSize = SizeOf( OSVERSIONINFOEX )
;————————————————————————————————————————————————————————————————————————————————————————————————
If GetVersionEx_( @P_Info )
If P_Info\wProductType = #VER_NT_WORKSTATION
Select P_Info\dwMajorVersion
Case 5 : Select P_Info\dwMinorVersion
Case 0 : P_Back = #_Windows_2000
Case 1 : P_Back = #_Windows_XP
EndSelect
Case 6 : Select P_Info\dwMinorVersion
Case 0 : P_Back = #_Windows_Vista
Case 1 : P_Back = #_Windows_7
EndSelect
Default
EndSelect
Else
Select P_Info\dwMajorVersion
Case 5 : Select P_Info\dwMinorVersion
Case 0 : P_Back = #_Windows_2000SRV
Case 2 : P_Back = #_Windows_2003SRV
EndSelect
Case 6 : Select P_Info\dwMinorVersion
Case 0 : P_Back = #_Windows_2008SRV
Case 1 : P_Back = #_Windows_2008SRV_R2
EndSelect
Default
EndSelect
EndIf
EndIf
;————————————————————————————————————————————————————————————————————————————————————————————————
ProcedureReturn P_Back
;————————————————————————————————————————————————————————————————————————————————————————————————
EndProcedure ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Procedure.l GetWindowsBuild() ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;————————————————————————————————————————————————————————————————————————————————————————————————
Protected P_Info.OSVERSIONINFOEX
P_Info\dwOSVersionInfoSize = SizeOf( OSVERSIONINFOEX )
;————————————————————————————————————————————————————————————————————————————————————————————————
If GetVersionEx_( @P_Info )
ProcedureReturn P_Info\dwBuildNumber
Else
ProcedureReturn 0
EndIf
;————————————————————————————————————————————————————————————————————————————————————————————————
EndProcedure ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Procedure.s Windows64BitString() ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;————————————————————————————————————————————————————————————————————————————————————————————————
If IsWindows64bit()
ProcedureReturn "64-Bit"
Else
ProcedureReturn "32-Bit"
EndIf
;————————————————————————————————————————————————————————————————————————————————————————————————
EndProcedure ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Procedure.s WindowsServerString() ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;————————————————————————————————————————————————————————————————————————————————————————————————
If IsWindowsServer()
ProcedureReturn "Server"
Else
ProcedureReturn "Workstation"
EndIf
;————————————————————————————————————————————————————————————————————————————————————————————————
EndProcedure ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Procedure.s WindowsVersionString() ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;————————————————————————————————————————————————————————————————————————————————————————————————
Select GetWindowsType()
Case #_Windows_7 : ProcedureReturn "Windows 7"
Case #_Windows_Vista : ProcedureReturn "Windows Vista"
Case #_Windows_XP : ProcedureReturn "Windows XP"
Case #_Windows_2000 : ProcedureReturn "Windows 2000"
Case #_Windows_2000SRV : ProcedureReturn "Windows 2000 Server"
Case #_Windows_2003SRV : ProcedureReturn "Windows 2003 Server"
Case #_Windows_2008SRV : ProcedureReturn "Windows 2008 Server"
Case #_Windows_2008SRV_R2 : ProcedureReturn "Windows 2008 Server R2"
Default : ProcedureReturn "Unbekannt"
EndSelect
;————————————————————————————————————————————————————————————————————————————————————————————————
EndProcedure ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;//////////////////////////////////////////////////////////////////////////////////////////////////
c4s
Addict
Addict
Posts: 1981
Joined: Thu Nov 01, 2007 5:37 pm
Location: Germany

Re: Round about Windowsversion

Post by c4s »

Tip:
Use the "Code tags" when posting code:

Code: Select all

Because() ; ...it is more readable :-)
Additional note:
You can replace your GetWindowsType() with the build-in OSVersion() function.
If any of you native English speakers have any suggestions for the above text, please let me know (via PM). Thanks!
User avatar
Vera
Addict
Addict
Posts: 858
Joined: Tue Aug 11, 2009 1:56 pm
Location: Essen (Germany)

Re: Round about Windowsversion

Post by Vera »

Hi Rudi,

Wellcome on Board :)

Please do us a favour and cut down these extrem fixed long lines ';------------------.....' because they corrupt the forums display as the browser can't brake them. This thread (and also when replying) doesn't even fit in fullscreen mode (1024x..).

greetings ~ Vera
Rudi Seitz
New User
New User
Posts: 2
Joined: Wed Mar 16, 2011 11:33 am

Re: Round about Windowsversion

Post by Rudi Seitz »

Sorry, forget my tip !

Windows make blind !
I've search several weeks for a "WindowsVersion()" and not seen that "OSVersion()" already exists in PB
Post Reply