Poprzedni | Spis treści | Następny
; GetParent ; wejście, góra stosu (np. C:\Program Files\Poop) ; wyjście, góra stosu (zamienia, z np. C:\Program Files) ; nie modyfikuje innych zmiennych. ; ; Użycie: ; Push "C:\Program Files\Directory\Whatever" ; Call GetParent ; Pop $R0 ; tutaj $R0 będzie równy "C:\Program Files\Directory" Function GetParent Exch $R0 Push $R1 Push $R2 Push $R3 StrCpy $R1 0 StrLen $R2 $R0 loop: IntOp $R1 $R1 + 1 IntCmp $R1 $R2 get 0 get StrCpy $R3 $R0 1 -$R1 StrCmp $R3 "\" get Goto loop get: StrCpy $R0 $R0 -$R1 Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd
; TrimNewlines ; wejście, góra stosu (np. whatever$\r$\n) ; wyjście, góra stosu (zamienia, z np. whatever) ; nie modyfikuje innych zmiennych. Function TrimNewlines Exch $R0 Push $R1 Push $R2 StrCpy $R1 0 loop: IntOp $R1 $R1 - 1 StrCpy $R2 $R0 1 $R1 StrCmp $R2 "$\r" loop StrCmp $R2 "$\n" loop IntOp $R1 $R1 + 1 IntCmp $R1 0 no_trim_needed StrCpy $R0 $R0 $R1 no_trim_needed: Pop $R2 Pop $R1 Exch $R0 FunctionEnd
; GetParameters ; wejście, brak ; wyjście, góra stosu (zamienia, z np. whatever) ; nie modyfikuje innych zmiennych. Function GetParameters Push $R0 Push $R1 Push $R2 Push $R3 StrCpy $R2 1 StrLen $R3 $CMDLINE ;Sprawdza czy istnieją znaki cudzysłowia lub spacje StrCpy $R0 $CMDLINE $R2 StrCmp $R0 '"' 0 +3 StrCpy $R1 '"' Goto loop StrCpy $R1 " " loop: IntOp $R2 $R2 + 1 StrCpy $R0 $CMDLINE 1 $R2 StrCmp $R0 $R1 get StrCmp $R2 $R3 get Goto loop get: IntOp $R2 $R2 + 1 StrCpy $R0 $CMDLINE 1 $R2 StrCmp $R0 " " get StrCpy $R0 $CMDLINE "" $R2 Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd
; StrStr ; wejście, góra stosu = łańcuch znakowy do wyszukania ; góra stosu-1 = łańcuch znakowy, w którym wyszukujemy ; wyjście, góra stosu (zamienia pozostałą część łańcucha znakowego) ; nie modyfikuje innych zmiennych. ; ; Użycie: ; Push "to jest dlugi napis" ; Push "dlugi" ; Call StrStr ; Pop $R0 ; (tutaj $R0 jest "dlugi napis") Function StrStr Exch $R1 ; st=haystack,old$R1, $R1=needle Exch ; st=old$R1,haystack Exch $R2 ; st=old$R1,old$R2, $R2=haystack Push $R3 Push $R4 Push $R5 StrLen $R3 $R1 StrCpy $R4 0 ; $R1=needle ; $R2=haystack ; $R3=len(needle) ; $R4=cnt ; $R5=tmp loop: StrCpy $R5 $R2 $R3 $R4 StrCmp $R5 $R1 done StrCmp $R5 "" done IntOp $R4 $R4 + 1 Goto loop done: StrCpy $R1 $R2 "" $R4 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Exch $R1 FunctionEnd
; GetWindowsVersion ; ; Oparty na funkcji Yazno, http://yazno.tripod.com/powerpimpit/ ; Uaktualniony przez Joost Verburg ; ; Zwraca na górze stosu ; ; Wersja Windows (95, 98, ME, NT x.x, 2000, XP, 2003, Vista) ; lub ; '' (Nieznana Wersja Windows) ; ; Użycie: ; Call GetWindowsVersion ; Pop $R0 ; tutaj $R0 jest "NT 4.0" lub inne Function GetWindowsVersion Push $R0 Push $R1 ClearErrors ReadRegStr $R0 HKLM \ "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion IfErrors 0 lbl_winnt ; nie 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 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_error: Strcpy $R0 '' lbl_done: Pop $R1 Exch $R0 FunctionEnd
; GetIEVersion ; ; Oparty na funkcji Yazno, http://yazno.tripod.com/powerpimpit/ ; Zwraca na górze stosu ; 1-6 (Zainstalowana wersja IE) ; lub ; '' (IE nie jest zainstalowany) ; ; Użycie: ; Call GetIEVersion ; Pop $R0 ; tutaj $R0 jest "5" lub inne Function GetIEVersion Push $R0 ClearErrors ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "Version" IfErrors lbl_123 lbl_456 lbl_456: ; ie 4+ Strcpy $R0 $R0 1 Goto lbl_done lbl_123: ; starsza wersja ie ClearErrors ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "IVer" IfErrors lbl_error StrCpy $R0 $R0 3 StrCmp $R0 '100' lbl_ie1 StrCmp $R0 '101' lbl_ie2 StrCmp $R0 '102' lbl_ie2 StrCpy $R0 '3' ; domyślnie w ie3, jeśli nie 100, 101, lub 102. Goto lbl_done lbl_ie1: StrCpy $R0 '1' Goto lbl_done lbl_ie2: StrCpy $R0 '2' Goto lbl_done lbl_error: StrCpy $R0 '' lbl_done: Exch $R0 FunctionEnd
; IsDotNETInstalled ; ; Oparty na GetDotNETVersion ; http://nsis.sourceforge.net/Get_.NET_Version ; ; Użycie: ; Call IsDotNETInstalled ; Pop $0 ; StrCmp $0 1 found.NETFramework no.NETFramework Function IsDotNETInstalled Push $0 Push $1 StrCpy $0 1 System::Call "mscoree::GetCORVersion(w, i ${NSIS_MAX_STRLEN}, *i) i .r1" StrCmp $1 0 +2 StrCpy $0 0 Pop $1 Exch $0 FunctionEnd
; IsFlashInstalled ; ; Napisał Yazno, http://yazno.tripod.com/powerpimpit/ ; Zwraca na górze stosu ; 0 (Flash nie jest zainstalowany) ; lub ; 1 (Flash jest zainstalowany) ; ; Użycie: ; Call IsFlashInstalled ; Pop $R0 ; $R0 tutaj jest "1" lub "0" Function IsFlashInstalled Push $R0 ClearErrors ReadRegStr $R0 HKCR "CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}" "" IfErrors lbl_na StrCpy $R0 1 Goto lbl_end lbl_na: StrCpy $R0 0 lbl_end: Exch $R0 FunctionEnd
; ConnectInternet (używa wtyczki Dialer) ; Napisał Joost Verburg ; ; Funkcja ta próbuje utworzyć połączenie z internetem, jeśli nie jest dostępne żadne połączenie. ; Jeśli nie jesteś pewien czy system, na którym uruchomiono instalatora ma aktywne połączenie ; z internetem, wywołaj tę funkcję przed pobieraniem plików przez wtyczkę NSISdl. ; ; Funkcja wymaga Internet Explorera 3, lecz pyta o ręczne połączenie, jeśli nie jest on zainstalowany. Function ConnectInternet Push $R0 ClearErrors Dialer::AttemptConnect IfErrors noie3 Pop $R0 StrCmp $R0 "online" connected MessageBox MB_OK|MB_ICONSTOP "Błąd połączenia z internetem." Quit ;Zamyka instalatora. Możesz dodać własną obsługę błędów. noie3: ; IE3 nie zainstalowany MessageBox MB_OK|MB_ICONINFORMATION "Proszę, połącz się teraz z internetem." connected: Pop $R0 FunctionEnd
System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' ;zmienna $R0 będzie zawierała nazwę instalatora
Wstaw poniższy fragment kodu do funkcji .onInit:
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "Instalator jest już uruchomiony." Abort
'myMutex' powinien być zastąpiony dowolną unikalną wartością.
Więcej użytecznych skryptów możesze znaleźć w NSIS Wiki, na forum NSIS oraz na stronie NSIS.