Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
как на созданной странице сделать кликабельную ссылку (без всяких плагинов типа Linker). »
${NSD_CreateLink} 0u 0u 100% 10u "Ссылка"
Pop $0
${NSD_OnClick} $0 onClickLink
Function onClickLink
ExecShell "open" "http://forum.oszone.net/"
FunctionEnd
Интересно, сколько бы я мог написать подобных "программ" на NSIS...
Ждём программку удаления файлов :)
Никто, кстати, не качал поделки автора данных постов? Троянчиков в архивах нет у него случайно?
Kopejkin
31-08-2015, 22:50
Какая трудолюбивая программа!
Копирует что-то, даже если ничего не добавлять :clapping:
http://savepic.net/7225019m.png (http://savepic.net/7225019.htm)
Sancho5555
01-09-2015, 03:49
Нужен совет. Хочу сделать смену иконки на выделенном объекте.
При таком коде (Хедер SetCursor.nsh) наблюдается мерцание курсора:
!define OCR_NORMAL 32512
!define OCR_IBEAM 32513
!define OCR_WAIT 32514
!define OCR_CROSS 32515
!define OCR_UP 32516
!define OCR_SIZENWSE 32642
!define OCR_SIZENESW 32643
!define OCR_SIZEWE 32644
!define OCR_SIZENS 32645
!define OCR_SIZEALL 32646
!define OCR_NO 32648
!define OCR_HAND 32649
!define OCR_APPSTARTING 32650
!define SetSystemCursor `!insertmacro SetSystemCursor`
!macro SetSystemCursor Cursor
System::Call USER32::LoadCursor(i,i${${Cursor}})i.s
System::Call USER32::SetCursor(is)
!macroend
!define SetFileCursor `!insertmacro SetFileCursor`
!macro SetFileCursor File
System::Call USER32::LoadCursorFromFile(t"${File}")i.s
System::Call USER32::SetCursor(is)
!macroend
А при таком:
!define OCR_NORMAL 32512
!define OCR_IBEAM 32513
!define OCR_WAIT 32514
!define OCR_CROSS 32515
!define OCR_UP 32516
!define OCR_SIZENWSE 32642
!define OCR_SIZENESW 32643
!define OCR_SIZEWE 32644
!define OCR_SIZENS 32645
!define OCR_SIZEALL 32646
!define OCR_NO 32648
!define OCR_HAND 32649
!define OCR_APPSTARTING 32650
!macro SetCursor
System::Call user32::SetClassLong(i${Msg},i-12,ir0)
!macroend
!define SetSystemCursor `!insertmacro SetSystemCursor`
!macro SetSystemCursor Msg Cursor
System::Call `user32::LoadImage(i0, i ${${Cursor}}, i ${IMAGE_CURSOR}, i 0, i 0, i ${LR_SHARED}) i.r0`
Push ${Msg}
!insertmacro SetCursor
!macroend
!define SetFileCursor `!insertmacro SetFileCursor`
!macro SetFileCursor Msg File
System::Call `user32::LoadImage(i0, t "${File}", i ${IMAGE_CURSOR}, i 0, i 0, i ${LR_LOADFROMFILE}) i.r0`
Push ${Msg}
!insertmacro SetCursor
!macroend
происходит применение курсора на все объекты одного класса. Например на кнопку или BMP картинку.
Вот сам код:
Name "Test"
OutFile "test.exe"
!include MUI2.nsh
!include SetCursor.nsh
!insertmacro MUI_LANGUAGE Russian
Var hCtl
Var Button1
Var Button2
Var Bitmap1
Var Bitmap1_hImage
Var Label1
Page custom Create
Function Create
nsDialogs::Create 1044
Pop $hCtl
${If} $hCtl == error
Abort
${EndIf}
${SetSystemCursor} $hCtl OCR_NO
${NSD_CreateButton} 82u 46u 49u 14u "1"
Pop $Button1
${SetSystemCursor} $Button1 OCR_HAND
${NSD_CreateButton} 180u 46u 49u 14u "2"
Pop $Button2
${NSD_CreateLabel} 113u 84u 65u 14u "Проверка"
Pop $Label1
${NSD_CreateBitmap} 7u 7u 57u 53u ""
Pop $Bitmap1
File "/oname=$PLUGINSDIR\3.bmp" "3.bmp"
${NSD_SetImage} $Bitmap1 "$PLUGINSDIR\3.bmp" $Bitmap1_hImage
${SetFileCursor} $Bitmap1 `$EXEDIR\cursor1.cur`
nsDialogs::Show $hCtl
FunctionEnd
Section
SectionEnd
Какая трудолюбивая программа!
Копирует что-то, даже если ничего не добавлять »
Такая трудолюбивая, что искусственно себе "перерывы на чай" делает:
MessageBox MB_YESNO|MB_USERICON $(LSTR_56) IDYES label_1919 IDNO label_1925 ; "The files ($3) already exists.$\n$\nClick $\"Yes$\" and rename the files of (Backup.$3).$\n$\nClick $\"No$\" and delete the files ($3)"
label_1919:
Rename $_26_\$3 $_26_\Backup.$3 ; $_26_\$3->$_26_\Backup.$3
ShowWindow $_21_ ${SW_HIDE}
SendMessage $_21_ ${WM_SETTEXT} 0 "STR:- $_38_ - $(LSTR_57)" ; "Renamed successfully"
SetCtlColors $_21_ 0x32CD32 transparent
ShowWindow $_21_ ${SW_SHOW}
Sleep 1000
label_1925:
Delete $_26_\$3
ShowWindow $_21_ ${SW_HIDE}
SendMessage $_21_ ${WM_SETTEXT} 0 "STR:- $_38_ - $(LSTR_58)" ; "Successfully removed"
SetCtlColors $_21_ 0x32CD32 transparent
ShowWindow $_21_ ${SW_SHOW}
Sleep 1000
Goto label_1933
label_1932:
StrCmp $0 0 0 label_1933
label_1933:
ShowWindow $_21_ ${SW_HIDE}
SendMessage $_21_ ${WM_SETTEXT} 0 "STR:- $(LSTR_59)" ; "Copied $_38_. Please wait..."
SetCtlColors $_21_ 0x32CD32 transparent
ShowWindow $_21_ ${SW_SHOW}
Banner::show /NOUNLOAD /set 76 $(LSTR_59) $(LSTR_60) ; "Copied $_38_. Please wait..." "Please wait..."
; Call Initialize_____Plugins
; File $PLUGINSDIR\Banner.dll
; SetDetailsPrint lastused
; Push $(LSTR_60) ; "Please wait..."
; Push $(LSTR_59) ; "Copied $_38_. Please wait..."
; Push 76
; Push /set
; CallInstDLL $PLUGINSDIR\Banner.dll /NOUNLOAD show
ClearErrors
SetOutPath $_26_
CopyFiles /SILENT $_29_ $_26_ ; $(LSTR_7)$_26_ ; "Copy to "
Banner::destroy
Особенно забавно в его коде смотрится картина с меткой label_1933 :)
наблюдается мерцание курсора: »
Тёмный лес с этим курсором в NSIS, как мы недавно здесь выяснили с MKN, спроси у него, может он чего добился (буквально страницу-две назад с этой проблемой воевали)
K.A.V.
приветствую
ещё такой вопрос возник - как скрыть содержимое инсталлятора от глаз архиваторов, в частности 7zip? Тут уже этот вопрос поднимался, но решения не нашли толкового, кто-то писал что можно это сделать средствами непосредственно НСИС, но способ не показал. Также программу какую-то выкладывали, но как-то не доверяю я таким программам. они неизвестно что вшивают в установщик.
Алгоритм сжатия LZMA Solid использую
ещё такой вопрос возник - как скрыть содержимое инсталлятора от глаз архиваторов, в частности 7zip? Тут уже этот вопрос поднимался, но решения не нашли толкового, кто-то писал что можно это сделать средствами непосредственно НСИС, но способ не показал »
http://nsis.sourceforge.net/Can_I_decompile_an_existing_installer
Отвечу вам тоже самое, что отвечаю на такие вопросы в личке.
Я ранее сильно не заморачивался этим вопросом и первое, на что наткнулся - http://samforum.org/showthread.php?t=30452
Это и использовал в своём SFX Creator, но потом отказался по причине, которая описана мной в той теме
Вроде как ссылаются на плагин DcryptDll для защиты файлов в инсталляторе, но опять же - лично сам ничего не пробовал, примерчики там вроде есть, как и в составе любого плагина...
они неизвестно что вшивают в установщик. »
Насчет Xexecute Hide - она только меняет парочку байт и всё (ничего не вшивает "левого"), но у неё есть проблема, описанная мной в теме на форуме samforum, насчет других программ ничего не скажу, не знаю о других
Насчет "средствами NSIS" - способ описан на страничке "Can I decompile an existing installer?" по первой ссылке.
Я добился такого эффекта (запрет на просмотр содержимого архиваторами) своей сборкой NSIS и буду использовать её в новой версии SFX Creator, выкладывать эту сборку я не буду по причине того, что она будет частью SFX Creator, у кого есть сильное желание - копайтесь в исходниках NSIS и добьётесь того, что вам нужно.
K.A.V.
спасибо.
Ну то что программуля крошит деинсталлятор не так страшно, достаточно деинсталлятор создать заранее и включить в дистрибутив программы наравне с другими файлами.
А вот то что она требует отключения CRC мне что-то не нравится, получается кто-то может что-то поменять внутри установщика и он запустится как родной.
Второй способ я не понял, сложновато для новичка типа меня.
------
И ещё возвращаясь к своему вопросу про добавление ссылки на созданной странице,
Ваш пример скрипта сработал! Благодарю.
Но решил обновить НСИС до последней версии и цвет ссылки почему-то такой стал:
http://i69.fastpic.ru/big/2015/0901/cf/1297a07fa16172c16768748644e237cf.png
в предыдущих версия был тёмно-синий, а сейчас побледнел.
Можно ли поменять этот цвет?
Можно ли поменять этот цвет? »
цвет, фон, шрифт...
${NSD_CreateLink} 16u 15u 100u 30u " oszone.net "
Pop $1
CreateFont $2 "Arial" 18
SendMessage $1 ${WM_SETFONT} $2 0
SetCtlColors $1 0xff5500 0xffff00
;или
;SetCtlColors $1 0xff5500 transparent
Интересно, возможно ли убрать рамку-окантовку вокруг текста, которая появляется при клике на линке ?
Интересно, возможно ли убрать рамку-окантовку вокруг текста, которая появляется при клике на линке ? »
Удалить стиль WS_TABSTOP у контрола не канает? Только тогда нельзя будет перейти на него TAB'ом
${NSD_RemoveStyle} $mylink ${WS_TABSTOP}
!define NSD_RemoveStyle "!insertmacro _NSD_RemoveStyle_Call"
!macro _NSD_RemoveStyle_Call CONTROL EXSTYLE
Push `${CONTROL}`
Push `${EXSTYLE}`
System::Store SR1R0
IntOp $R1 $R1 ~
System::Call `user32::GetWindowLong(iR0,i${GWL_STYLE})i.R2`
IntOp $R2 $R1 & $R2
System::Call `user32::SetWindowLong(iR0,i${GWL_STYLE},iR2)`
System::Store L
!macroend
Удалить стиль WS_TABSTOP у контрола не канает? »
Не, не канает... Рамка на месте...
kotkovets
02-09-2015, 11:25
Не, не канает... Рамка на месте... »
а какая цель, простое любопытство или мешает жить ? :)
---
кинь код, любопытно стало .....
а какая цель, простое любопытство или мешает жить ? »
Ужасно не красиво, на мой взгляд появление этой рамки...
http://s019.radikal.ru/i611/1509/3f/654c16c24c38.jpg
Цель - всё тот же метрофейс. Очень удобно кликать по цветным плиткам-линкам - и ладошка-указатель есть (не надо заморачиваться лишним кодом), и рамку-выделение плитки-кнопки не сложно организовать и главное - никаких внешних картинок не надо...
код стандартный :
outfile CreateLink-test.exe
Page Custom MyPage
Page Instfiles
!include nsDialogs.nsh
Var dlg
Var Link1
Function MyPage
nsDialogs::Create 1018
Pop $dlg
${NSD_CreateLink} 16u 15u 100u 30u " ссылка "
Pop $Link1
CreateFont $2 "Arial" 18
SendMessage $Link1 ${WM_SETFONT} $2 0
SetCtlColors $Link1 0xff5500 0xffff00
${NSD_OnClick} $Link1 ClickLink1
nsDialogs::Show
FunctionEnd
Function ClickLink1
MessageBox MB_OK "Click"
FunctionEnd
Section
SectionEnd
kotkovets
02-09-2015, 16:16
Ужасно не красиво, на мой взгляд появление этой рамки... »
наверно не избавиться так просто, рамка вырисовывается заново, когда элемент получает фокус,
как перехватить действие фокуса - я не знаю. на html полно решений (есть свойство border)
Sancho5555
04-09-2015, 11:10
MKN, Через Label + OCR_HAND можно cделать.
ZaxBoys66
04-09-2015, 14:58
# INCLUDES
!include "FileFunc.nsh"
!include "TextFunc.nsh"
OutFile "content-length_test.exe"
Section 'Size App' Main
inetc::head /silent "http://dl.7-zip.org/7z1505.exe" "$EXEDIR\File.txt"
Pop $R0
StrCmp $R0 "OK" +3
MessageBox MB_ICONEXCLAMATION "$R0.Can not be downloading!"
Goto Cancelled
StrCpy $0 0
stGet:
IntOp $0 $0 + 1
${LineRead} "$EXEDIR\File.txt" "$0" $1
IfErrors 0 +2
MessageBox MB_OK|MB_ICONSTOP "error" idok error
StrCpy $2 "$1" 16
StrCmp $2 "Content-Length: " 0 stGet
StrCpy $2 "$1" "" 16
MessageBox MB_OK|MB_ICONINFORMATION "$2"
error:
/*
${LineRead} "$EXEDIR\File.txt" "6" $1
IfErrors 0 +2
MessageBox MB_OK|MB_ICONSTOP "error" idok error
StrCpy $2 "$1" 16
StrCmp $2 "Content-Length: " +2 0
MessageBox MB_OK|MB_ICONSTOP "error" idok error
StrCpy $2 "$1" "" 16
MessageBox MB_OK|MB_ICONINFORMATION "$2"
error:
*/
Cancelled:
SectionEnd
; This file can not be read.Message error.Please help.
wolkow70
05-09-2015, 17:41
На системах Windows 7,8 можно вызвать апплет "программы по умолчанию" для конкретной программы таким способом.
!define CLSCTX_INPROC_SERVER 0x1
!define CLSID_ApplicationAssociationRegistrationUI {1968106d-f3b5-44cf-890e-116fcb9ecef1}
!define IID_IApplicationAssociationRegistrationUI {1f76a169-f994-40ac-8fc8-0959e8874710}
System::Call 'OLE32::CoCreateInstance(g "${CLSID_ApplicationAssociationRegistrationUI}",i 0,i ${CLSCTX_INPROC_SERVER},g "${IID_IApplicationAssociationRegistrationUI}",*i.r1)i.r0' ;ptr is now in $1 and hr in $0
${If} $1 <> 0
System::Call '$1->3(w "название программы")i.r0'
System::Call '$1->2()' ;IUnknown::Release
К сожаление, на Windows 10 этот способ не работает. Кто нибудь знает как можно вызвать страницу "программы по умолчанию" для конкретной программы через API или еще как нибудь?
; How to make fileread to read only "Content-Length" »
!include "TextFunc.nsh"
OutFile "content-length_test.exe"
Section
FileOpen $0 "$EXEDIR\File.txt" W
FileWrite $0 "HTTP/1.1 200 OK"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 "Date: Fri, 04 Sep 2015 07:27:00 GMT"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 "Server: Apache"
FileWriteByte $4 "13"
FileWriteByte $4 "10"
FileWrite $0 "Last-Modified: Wed, 24 Apr 2013 08:27:32 GMT"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 'ETag: "2b2e728-a38420-4db1712ca0d12"'
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 "Accept-Ranges: bytes"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 "Content-Length: 10716192"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 "Content-Type: application/octet-stream"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 "Expires: Sat, 05 Sep 2015 07:27:00 GMT"
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 "Connection: keep-alive"
FileClose $0
/*
FileOpen $0 "$EXEDIR\File.txt" r
FileRead $0 $1
FileRead $0 $2 ''
FileClose $0
MessageBox MB_OK "$1 $2"
*/
StrCpy $0 0
stGet:
IntOp $0 $0 + 1
${LineRead} "$EXEDIR\File.txt" "$0" $1
IfErrors 0 +2
MessageBox MB_OK|MB_ICONSTOP "error" idok error
StrCpy $2 "$1" 16
StrCmp $2 "Content-Length: " 0 stGet
StrCpy $2 "$1" "" 16
MessageBox MB_OK|MB_ICONINFORMATION "$2"
error:
SectionEnd
А если количество строк фиксировано и вы точно знаете, на какой строке будет эта запись - можно обойтись без чтения всего файла, а сразу указать нужную строку:
${LineRead} "$EXEDIR\File.txt" "6" $1
IfErrors 0 +2
MessageBox MB_OK|MB_ICONSTOP "error" idok error
StrCpy $2 "$1" 16
StrCmp $2 "Content-Length: " +2 0
MessageBox MB_OK|MB_ICONSTOP "error" idok error
StrCpy $2 "$1" "" 16
MessageBox MB_OK|MB_ICONINFORMATION "$2"
error:
Dodakaedr
09-09-2015, 23:16
Как реализовать функцию sharedfile в nsis как в inno setup?Source: "file.ocx"; DestDir: "{sys}"; Flags: sharedfile
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC