Get Windows version: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
(added vista) |
JohnTHaller (talk | contribs) (→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/ | ||
; | ; 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 | 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 | |||
!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"'