PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [91] 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

K.A.V.
29-08-2015, 13:04
как на созданной странице сделать кликабельную ссылку (без всяких плагинов типа Linker). »
${NSD_CreateLink} 0u 0u 100% 10u "Ссылка"
Pop $0
${NSD_OnClick} $0 onClickLink

Function onClickLink
ExecShell "open" "http://forum.oszone.net/"
FunctionEnd

K.A.V.
31-08-2015, 19:51
Интересно, сколько бы я мог написать подобных "программ" на 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

K.A.V.
01-09-2015, 03:55
Какая трудолюбивая программа!
Копирует что-то, даже если ничего не добавлять »
Такая трудолюбивая, что искусственно себе "перерывы на чай" делает:

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, спроси у него, может он чего добился (буквально страницу-две назад с этой проблемой воевали)

Serg866
01-09-2015, 13:47
K.A.V.
приветствую
ещё такой вопрос возник - как скрыть содержимое инсталлятора от глаз архиваторов, в частности 7zip? Тут уже этот вопрос поднимался, но решения не нашли толкового, кто-то писал что можно это сделать средствами непосредственно НСИС, но способ не показал. Также программу какую-то выкладывали, но как-то не доверяю я таким программам. они неизвестно что вшивают в установщик.

Алгоритм сжатия LZMA Solid использую

K.A.V.
01-09-2015, 14:59
ещё такой вопрос возник - как скрыть содержимое инсталлятора от глаз архиваторов, в частности 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 и добьётесь того, что вам нужно.

Serg866
01-09-2015, 15:15
K.A.V.
спасибо.
Ну то что программуля крошит деинсталлятор не так страшно, достаточно деинсталлятор создать заранее и включить в дистрибутив программы наравне с другими файлами.
А вот то что она требует отключения CRC мне что-то не нравится, получается кто-то может что-то поменять внутри установщика и он запустится как родной.
Второй способ я не понял, сложновато для новичка типа меня.
------
И ещё возвращаясь к своему вопросу про добавление ссылки на созданной странице,
Ваш пример скрипта сработал! Благодарю.
Но решил обновить НСИС до последней версии и цвет ссылки почему-то такой стал:
http://i69.fastpic.ru/big/2015/0901/cf/1297a07fa16172c16768748644e237cf.png
в предыдущих версия был тёмно-синий, а сейчас побледнел.
Можно ли поменять этот цвет?

MKN
01-09-2015, 15:23
Можно ли поменять этот цвет? »
цвет, фон, шрифт...

${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

MKN
01-09-2015, 17:35
Интересно, возможно ли убрать рамку-окантовку вокруг текста, которая появляется при клике на линке ?

K.A.V.
01-09-2015, 18:39
Интересно, возможно ли убрать рамку-окантовку вокруг текста, которая появляется при клике на линке ? »
Удалить стиль 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

MKN
02-09-2015, 10:49
Удалить стиль WS_TABSTOP у контрола не канает? »
Не, не канает... Рамка на месте...

kotkovets
02-09-2015, 11:25
Не, не канает... Рамка на месте... »
а какая цель, простое любопытство или мешает жить ? :)
---
кинь код, любопытно стало .....

MKN
02-09-2015, 12:02
а какая цель, простое любопытство или мешает жить ? »
Ужасно не красиво, на мой взгляд появление этой рамки...
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 или еще как нибудь?

K.A.V.
06-09-2015, 08:07
; 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