Get Windows version: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
(added vista)
(→‎The Script: Added Windows 7, Define and Macro. Calling it Version 2.0)
Line 6: Line 6:
== The Script ==
== The Script ==
<highlight-nsis>
<highlight-nsis>
; GetWindowsVersion
; GetWindowsVersion 2.0 (2008-01-07)
;
;
; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
; Updated by Joost Verburg
; Update by Joost Verburg
; Update (Macro, Define, Windows 7 detection) - John T. Haller of PortableApps.com - 2008-01-07
;
;
; Returns on top of stack
; Usage: ${GetWindowsVersion} $R0
;
;
; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003, Vista)
; $R0 contains: 95, 98, ME, NT x.x, 2000, XP, 2003, Vista, 7 or '' (for unknown)
; or
; '' (Unknown Windows Version)
;
; Usage:
;  Call GetWindowsVersion
;  Pop $R0
;  ; at this point $R0 is "NT 4.0" or whatnot
 
Function GetWindowsVersion
Function GetWindowsVersion
 
   Push $R0
   Push $R0
   Push $R1
   Push $R1
 
   ClearErrors
   ClearErrors
 
   ReadRegStr $R0 HKLM \
   ReadRegStr $R0 HKLM \
   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
 
   IfErrors 0 lbl_winnt
   IfErrors 0 lbl_winnt
    
    
Line 37: Line 31:
   ReadRegStr $R0 HKLM \
   ReadRegStr $R0 HKLM \
   "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
   "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
 
   StrCpy $R1 $R0 1
   StrCpy $R1 $R0 1
   StrCmp $R1 '4' 0 lbl_error
   StrCmp $R1 '4' 0 lbl_error
 
   StrCpy $R1 $R0 3
   StrCpy $R1 $R0 3
 
   StrCmp $R1 '4.0' lbl_win32_95
   StrCmp $R1 '4.0' lbl_win32_95
   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
 
   lbl_win32_95:
   lbl_win32_95:
     StrCpy $R0 '95'
     StrCpy $R0 '95'
   Goto lbl_done
   Goto lbl_done
 
   lbl_win32_98:
   lbl_win32_98:
     StrCpy $R0 '98'
     StrCpy $R0 '98'
   Goto lbl_done
   Goto lbl_done
 
   lbl_win32_ME:
   lbl_win32_ME:
     StrCpy $R0 'ME'
     StrCpy $R0 'ME'
   Goto lbl_done
   Goto lbl_done
 
   lbl_winnt:
   lbl_winnt:
 
   StrCpy $R1 $R0 1
   StrCpy $R1 $R0 1
 
   StrCmp $R1 '3' lbl_winnt_x
   StrCmp $R1 '3' lbl_winnt_x
   StrCmp $R1 '4' lbl_winnt_x
   StrCmp $R1 '4' lbl_winnt_x
 
   StrCpy $R1 $R0 3
   StrCpy $R1 $R0 3
 
   StrCmp $R1 '5.0' lbl_winnt_2000
   StrCmp $R1 '5.0' lbl_winnt_2000
   StrCmp $R1 '5.1' lbl_winnt_XP
   StrCmp $R1 '5.1' lbl_winnt_XP
   StrCmp $R1 '5.2' lbl_winnt_2003
   StrCmp $R1 '5.2' lbl_winnt_2003
   StrCmp $R1 '6.0' lbl_winnt_vista lbl_error
   StrCmp $R1 '6.0' lbl_winnt_vista
 
  StrCmp $R1 '6.1' lbl_winnt_7 lbl_error
   lbl_winnt_x:
   lbl_winnt_x:
     StrCpy $R0 "NT $R0" 6
     StrCpy $R0 "NT $R0" 6
   Goto lbl_done
   Goto lbl_done
 
   lbl_winnt_2000:
   lbl_winnt_2000:
     Strcpy $R0 '2000'
     Strcpy $R0 '2000'
   Goto lbl_done
   Goto lbl_done
 
   lbl_winnt_XP:
   lbl_winnt_XP:
     Strcpy $R0 'XP'
     Strcpy $R0 'XP'
   Goto lbl_done
   Goto lbl_done
 
   lbl_winnt_2003:
   lbl_winnt_2003:
     Strcpy $R0 '2003'
     Strcpy $R0 '2003'
   Goto lbl_done
   Goto lbl_done
 
   lbl_winnt_vista:
   lbl_winnt_vista:
     Strcpy $R0 'Vista'
     Strcpy $R0 'Vista'
   Goto lbl_done
   Goto lbl_done
 
 
  lbl_winnt_7
    Strcpy $R0 '7'
  Goto lbl_done
   lbl_error:
   lbl_error:
     Strcpy $R0 ''
     Strcpy $R0 ''
   lbl_done:
   lbl_done:
 
   Pop $R1
   Pop $R1
   Exch $R0
   Exch $R0
FunctionEnd


FunctionEnd
!macro GetWindowsVersion OUTPUT_VALUE
Call GetWindowsVersion
Pop `${OUTPUT_VALUE}`
!macroend
 
!define GetWindowsVersion '!insertmacro "GetWindowsVersion"'
</highlight-nsis>
</highlight-nsis>


[[Category:Other Products Version Detection Functions]]
[[Category:Other Products Version Detection Functions]]

Revision as of 06:50, 7 January 2009

Author: sunjammer (talk, contrib)


Description

This function gets which Microsoft Windows product the user uses.

The Script

; GetWindowsVersion 2.0 (2008-01-07)
;
; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
; Update by Joost Verburg
; Update (Macro, Define, Windows 7 detection) - John T. Haller of PortableApps.com - 2008-01-07
;
; Usage: ${GetWindowsVersion} $R0
;
; $R0 contains: 95, 98, ME, NT x.x, 2000, XP, 2003, Vista, 7 or '' (for unknown)
 
Function GetWindowsVersion
 
  Push $R0
  Push $R1
 
  ClearErrors
 
  ReadRegStr $R0 HKLM \
  "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
 
  IfErrors 0 lbl_winnt
 
  ; we are not NT
  ReadRegStr $R0 HKLM \
  "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
 
  StrCpy $R1 $R0 1
  StrCmp $R1 '4' 0 lbl_error
 
  StrCpy $R1 $R0 3
 
  StrCmp $R1 '4.0' lbl_win32_95
  StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
 
  lbl_win32_95:
    StrCpy $R0 '95'
  Goto lbl_done
 
  lbl_win32_98:
    StrCpy $R0 '98'
  Goto lbl_done
 
  lbl_win32_ME:
    StrCpy $R0 'ME'
  Goto lbl_done
 
  lbl_winnt:
 
  StrCpy $R1 $R0 1
 
  StrCmp $R1 '3' lbl_winnt_x
  StrCmp $R1 '4' lbl_winnt_x
 
  StrCpy $R1 $R0 3
 
  StrCmp $R1 '5.0' lbl_winnt_2000
  StrCmp $R1 '5.1' lbl_winnt_XP
  StrCmp $R1 '5.2' lbl_winnt_2003
  StrCmp $R1 '6.0' lbl_winnt_vista
  StrCmp $R1 '6.1' lbl_winnt_7 lbl_error
 
  lbl_winnt_x:
    StrCpy $R0 "NT $R0" 6
  Goto lbl_done
 
  lbl_winnt_2000:
    Strcpy $R0 '2000'
  Goto lbl_done
 
  lbl_winnt_XP:
    Strcpy $R0 'XP'
  Goto lbl_done
 
  lbl_winnt_2003:
    Strcpy $R0 '2003'
  Goto lbl_done
 
  lbl_winnt_vista:
    Strcpy $R0 'Vista'
  Goto lbl_done
 
  lbl_winnt_7
    Strcpy $R0 '7'
  Goto lbl_done
 
  lbl_error:
    Strcpy $R0 ''
  lbl_done:
 
  Pop $R1
  Exch $R0
 
FunctionEnd
 
!macro GetWindowsVersion OUTPUT_VALUE
	Call GetWindowsVersion
	Pop `${OUTPUT_VALUE}`
!macroend
 
!define GetWindowsVersion '!insertmacro "GetWindowsVersion"'