2007-12-30 13:05:27 +00:00
\A{usefulfunctions} Useful Scripts
\H{getieversion} Get Internet Explorer version
\c ; GetIEVersion
\c ;
\c ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
2016-03-27 23:24:43 +00:00
\c ; Returns 1-6 (IE Version) or '' (IE is not installed) on top of the stack
2007-12-30 13:05:27 +00:00
\c ;
\c ; Usage:
\c ; Call GetIEVersion
2016-03-27 23:24:43 +00:00
\c ; Pop $R0 ; at this point $R0 is "5" or whatnot
2007-12-30 13:05:27 +00:00
\c
\c Function GetIEVersion
\c Push $R0
\c ClearErrors
\c ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "Version"
\c IfErrors lbl_123 lbl_456
\c
\c lbl_456: ; ie 4+
\c Strcpy $R0 $R0 1
\c Goto lbl_done
\c
\c lbl_123: ; older ie version
\c ClearErrors
\c ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "IVer"
\c IfErrors lbl_error
\c
\c StrCpy $R0 $R0 3
\c StrCmp $R0 '100' lbl_ie1
\c StrCmp $R0 '101' lbl_ie2
\c StrCmp $R0 '102' lbl_ie2
\c
\c StrCpy $R0 '3' ; default to ie3 if not 100, 101, or 102.
\c Goto lbl_done
\c lbl_ie1:
\c StrCpy $R0 '1'
\c Goto lbl_done
\c lbl_ie2:
\c StrCpy $R0 '2'
\c Goto lbl_done
\c lbl_error:
\c StrCpy $R0 ''
\c lbl_done:
\c Exch $R0
\c FunctionEnd
\H{detect.netframework} Is .NET Framework installed?
\c ; IsDotNETInstalled
\c ;
\c ; Based on GetDotNETVersion
\c ; http://nsis.sourceforge.net/Get_.NET_Version
\c ;
\c ; Usage:
\c ; Call IsDotNETInstalled
\c ; Pop $0
2016-03-27 23:24:43 +00:00
\c ; StrCmp $0 1 found_dotNETFramework no_dotNETFramework
2007-12-30 13:05:27 +00:00
\c
\c Function IsDotNETInstalled
\c Push $0
\c Push $1
\c
\c StrCpy $0 1
\c System::Call "mscoree::GetCORVersion(w, i ${NSIS_MAX_STRLEN}, *i) i .r1"
\c StrCmp $1 0 +2
\c StrCpy $0 0
\c
\c Pop $1
\c Exch $0
\c FunctionEnd
\H{isflashinstalled} Is Macromedia Flash Player installed?
\c ; IsFlashInstalled
\c ;
\c ; By Yazno, http://yazno.tripod.com/powerpimpit/
2016-03-27 23:24:43 +00:00
\c ; Returns the result on top of the stack
2007-12-30 13:05:27 +00:00
\c ;
\c ; Usage:
\c ; Call IsFlashInstalled
2016-03-27 23:24:43 +00:00
\c ; Pop $R0 ; $R0 is "1" or "0" at this point
2007-12-30 13:05:27 +00:00
\c
\c Function IsFlashInstalled
\c Push $R0
\c ClearErrors
\c ReadRegStr $R0 HKCR "CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}" ""
\c IfErrors lbl_na
\c StrCpy $R0 1
\c Goto lbl_end
\c lbl_na:
\c StrCpy $R0 0
\c lbl_end:
\c Exch $R0
\c FunctionEnd
\H{connectinternet} Connect to the Internet
\c ; ConnectInternet (uses Dialer plug-in)
\c ; Written by Joost Verburg
\c ;
\c ; This function attempts to make a connection to the internet if there is no
\c ; connection available. If you are not sure that a system using the installer
\c ; has an active internet connection, call this function before downloading
\c ; files with NSISdl.
\c ;
\c ; The function requires Internet Explorer 3, but asks to connect manually if
\c ; IE3 is not installed.
\c
\c Function ConnectInternet
\c
\c Push $R0
\c
\c ClearErrors
\c Dialer::AttemptConnect
\c IfErrors noie3
\c
\c Pop $R0
\c StrCmp $R0 "online" connected
\c MessageBox MB_OK|MB_ICONSTOP "Cannot connect to the internet."
\c Quit ;This will quit the installer. You might want to add your own error handling.
\c
\c noie3:
\c
\c ; IE3 not installed
\c MessageBox MB_OK|MB_ICONINFORMATION "Please connect to the internet now."
\c
\c connected:
\c
\c Pop $R0
\c
\c FunctionEnd
\H{installerfilename} Get Installer Filename
2016-03-27 23:24:43 +00:00
\c System::Call 'kernel32::GetModuleFileName(p 0, t .R0, i ${NSIS_MAX_STRLEN}) i.r1'
2007-12-30 13:05:27 +00:00
\c ;$R0 will contain the installer filename
\H{multipleinstances} Prevent Multiple Instances
Put the following code in your \R{oninit}{.onInit function}:
2013-09-06 23:48:59 +00:00
\c System::Call 'kernel32::CreateMutex(p 0, i 0, t "myMutex") p .r1 ?e'
2007-12-30 13:05:27 +00:00
\c Pop $R0
\c
\c StrCmp $R0 0 +3
\c MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running."
\c Abort
2016-03-27 23:24:43 +00:00
'myMutex' must be replaced by a unique value!
2007-12-30 13:05:27 +00:00
\H{morefuncs} More
2016-03-27 23:24:43 +00:00
You can find more useful scripts on \W{http://nsis.sourceforge.net/wiki/}{the NSIS Wiki}, \W{http://forums.winamp.com/forumdisplay.php?s=&forumid=65}{the NSIS forum} and the \W{http://nsis.sourceforge.net/}{NSIS development page}.