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

iglezz
05-01-2020, 16:00
Cyberworm, Такое может быть под 64-бит системой. Путь для InstallDirRegKey надо указывать "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 17470"

Cyberworm
05-01-2020, 22:10
Cyberworm, Такое может быть под 64-бит системой. Путь для InstallDirRegKey надо указывать "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 17470" »

Это дохлый номер, потому что клиент Steam прописывает основные данные игр только в ветке "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\******"

В данной директории "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 17470" вообще ничего нет, как и самой важной ветки Steam App 17470. Я скомпилировал ради теста твой вариант с Wow6432Node, но это результатов не принесло.

iglezz
05-01-2020, 23:55
Cyberworm, Что-то я слона сразу не приметил :)
HKEY_LOCAL_MACHINE\ удалить надо.

Какие, кстати? версия NSIS и разрядность Steam и Windows?

iglezz
06-01-2020, 00:27
Только что проверил. Как-то непонятно этот InstallDirRegKey работает - из HKCU читает, а из HKLM - нет

Обходной путь - установка значения $INSTDIR в .onInit:Name "RegReadTest"
Unicode true
RequestExecutionLevel admin
SetOverwrite on
SetCompressor LZMA
OutFile "RegReadTest.exe"

page directory
page instfiles

Function .onInit
SetRegView 64
Push $0
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver" "InstallLocation"
IfErrors 0 +3
MessageBox MB_OK "Программа ХХХ не установлена!"
Quit
StrCpy $INSTDIR $0
Pop $0
FunctionEnd

Section ""
MessageBox MB_OK "Установка в папку:$\n $INSTDIR"
SectionEnd

Cyberworm
06-01-2020, 13:05
Какие, кстати? версия NSIS и разрядность Steam и Windows? »

Windows 10 Professional x64 и NSIS 3.05 взял с официального сайта. Версию NSIS x64 надо компилировать из исходников. Steam распространяется только в стандартной 32-битной версии. Вот поэтому я и решил разобрать этот вопрос здесь, потому что команда InstallDirRegKey действительно должным образом не работает. Точнее работает с исключениями или даже ограничениями. Сейчас попробую твой вариант с назначением переменной в .onInit

mss307
10-03-2020, 17:35
Всем привет.

Возникла следующая проблема:

Необходимо задать картинку в качестве MUI_HEADERIMAGE_BITMAP. С этим проблем нет. Картинка строго по ширине окна инсталлятора.

После попытки задать $mui.Header.Text и $mui.Header.SubText они становятся невидимыми. Это тоже не проблема, обошел примерно так:
GetDlgItem $8 $HWNDPARENT 0x416 ; Header image
GetDlgItem $9 $HWNDPARENT 0x40A ; Header
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) \
b ($8, $9, 0, 0, 497, 57, 0)"

Только при этом координаты Text и SubText хедера теперь не прижаты к левому краю.
Пытаюсь так менять координаты:
System::Call "*${stRECT} .r1"
System::Call "User32::GetWindowRect(i, i) i ($mui.Header.Text, r1) .r2"
System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
IntOp $6 $4 - $2
IntOp $7 $5 - $3
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) \
b ($mui.Header.Text, 0, 20, 15, ir6, ir7, 0" ;

Если задавать MUI_HEADER_TRANSPARENT_TEXT, то текст не отображается. В противном случае, текст отображается только после возврата на страницу со следующей. Также надписи накладываются друг на друга.

Для текста цвета задаются так:
CreateFont $2 "$(^Font)" "9" "700"
SendMessage $mui.Header.Text ${WM_SETFONT} $2 0
SetCtlColors $mui.Header.Text "0x0F0FAF" "transparent"

Был бы благодарен за помощь!

iglezz
10-03-2020, 17:40
mss307, лучше код привести того, что не получается вместо этих обрывков, ибо есть подозрение на велосипедостроение..

mss307
10-03-2020, 17:46
Да, конечно, овнокодинг и велосипедостроение.

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "..\img\test_top_logo.bmp"
!define MUI_HEADER_TRANSPARENT_TEXT
!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH
(...)
# LICENSE PAGE
!define MUI_PAGE_HEADER_TEXT "End User License Agreement"
!define MUI_PAGE_HEADER_SUBTEXT "Please read the following license agreement \
carefully"
!define MUI_PAGE_CUSTOMFUNCTION_PRE LicensePagePre
!define MUI_LICENSEPAGE_CHECKBOX
!insertmacro MUI_PAGE_LICENSE "..\..\..\EULA\LICENSE.rtf"
(...)
Function LicensePagePre
${If} 1 == $GoToFinish
Abort
${EndIf}
Call ChangeHeaderTextPos
FunctionEnd
(...)
Function ${un}ChangeHeaderTextPos
System::Call "*${stRECT} .r1"
System::Call "User32::GetWindowRect(i, i) i ($mui.Header.Text, r1) .r2"
System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
IntOp $6 $4 - $2
IntOp $7 $5 - $3
MessageBox MB_OK "$4-$2=$6 $5-$3=$7"
!define ${un}HWND_TOPMOST -1
; System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) \
; b ($mui.Header.Text, ${HWND_TOPMOST}, 20, 15, ir6, ir7, ${SWP_NOMOVE}|${SWP_NOSIZE})" ; hwnd hwndafterZdepth x y w h flags
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) \
b ($mui.Header.Text, 0, 20, 15, ir6, ir7, 0" ; hwnd hwndafterZdepth x y w h flags
CreateFont $2 "$(^Font)" "9" "700"
SendMessage $mui.Header.Text ${WM_SETFONT} $2 0
SetCtlColors $mui.Header.Text "0x0F0FAF" "transparent"
System::Call "*${stRECT} .r1"
System::Call "User32::GetWindowRect(i, i) i ($mui.Header.Text, r1) .r2"
System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
IntOp $6 $4 - $2
IntOp $7 $5 - $3
MessageBox MB_OK "$4-$2=$6 $5-$3=$7"
CreateFont $3 "$(^Font)" "8" "700"
SendMessage $mui.Header.SubText ${WM_SETFONT} $3 0
SetCtlColors $mui.Header.SubText "0x0F0FAF" "transparent"
System::Call "*${stRECT} .r1"
System::Call "User32::GetWindowRect(i, i) i ($mui.Header.SubText, r1) .r2"
System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)"
IntOp $6 $4 - $2
IntOp $7 $5 - $3
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) \
b ($mui.Header.SubText, 0, 40, 30, ir6, ir7, 0)" ; hwnd hwndafterZdepth x y w h flags
GetDlgItem $8 $HWNDPARENT 0x416 ; Header image
GetDlgItem $9 $HWNDPARENT 0x40A ; Header
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) \
b ($8, $9, 0, 0, 497, 57, 0)" ; hwnd hwndafterZdepth x y w h flags
FunctionEnd »

MKN
10-03-2020, 18:21
Text и SubText хедера теперь не прижаты к левому краю »
Добавь !define MUI_HEADERIMAGE_RIGHT
К примеру, в таком виде у меня вроде всё нормально (a1.bmp - моя картинка) :

!include "nsDialogs.nsh"
!include "MUI2.nsh"
OutFile "test.exe"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "c:\Program Files\NSIS\Contrib\Graphics\Header\a1.bmp"
!define MUI_HEADERIMAGE_RIGHT
!define MUI_HEADER_TRANSPARENT_TEXT

Page Custom MyPage

Function MyPage
!insertmacro MUI_HEADER_TEXT "Title text" "Subtitle text"
nsDialogs::Create 1018
Pop $0
GetDlgItem $0 $HWNDPARENT 0x416 ; Header image
GetDlgItem $1 $HWNDPARENT 0x40A ; Header
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b ($0, $1, 0, 0, 497, 57, 0)"
nsDialogs::Show
FunctionEnd

!insertmacro MUI_LANGUAGE "English"

Section
SectionEnd

mss307
10-03-2020, 18:30
Да, а ларчик просто открывался. Неожиданно, честно говоря. Это так очевидно было?

AlekseyPopovv
18-03-2020, 11:13
Как изменить цвет окна MessageBox?

iglezz
18-03-2020, 11:40
Никак, это системный диалог.

AlekseyPopovv
22-03-2020, 08:20
Как изменить параметры в *.ini?
Пример:
[Section]
Parameter1=5000
Parameter2=7000
Если эти параметры равны 5000 и 7000, то Parameter2 нужно заменить на 3000
Если параметры не равны 5000 и 7000, то замена не нужна
[Section]
Parameter1=5000
Parameter2=3000
Как это сделать?

iglezz
22-03-2020, 09:32
ReadINIStr (https://nsis.sourceforge.io/mediawiki/index.php?title=Reference/ReadINIStr), WriteINIStr (https://nsis.sourceforge.io/mediawiki/index.php?title=Reference/WriteINIStr)

Примерно так:ReadINIStr $0 "filename" "section" "param1"
StrCmp $0 5000 0 +4
ReadINIStr $0 "filename" "section" "param2"
StrCmp $0 7000 0 +2
WriteINIStr "filename" "section" "param2" 30000

AlekseyPopovv
28-03-2020, 11:47
Может кто знает как сделать, что бы например файл *.png открывался в программе (сама программа программа поддерживает открытие файла перетягиванием) перетягиванием на лаунчер?
Как исполнительному файлу это передать?

iglezz
28-03-2020, 11:57
AlekseyPopovv, Если под перетягиванием подразумевается перетягивание файла на ярлык/exe, то !include "FileFunc.nsh"

; В теле секции/функции/макро:
${GetParameters} $0
; В $0 теперь содержатся все параметры, переданные лаунчеру
; Далее можно запустить программу с этими параметрами:
Exec 'program.exe $0'

Iska
28-03-2020, 17:42
iglezz, лишние кавычки, обрамляющие имена программы и передаваемого файла, не нужны там?

iglezz
28-03-2020, 18:54
Iska, Это в качестве домашнего задания :)

Если перетаскиваемый на лаунчер файл имеет в полном пути пробелы, то Проводник (и не только) обрамляет его в кавычки. NSIS эти кавычки не трогает, поэтому строку параметров можно передать в исходном виде.
А если понадобится несколько указанных в параметрах файлов передать в программу по одному, то тогда понадобится немного подумать над алгоритмом разбора и реализовать его. Или поискать готовый...

Iska
29-03-2020, 00:24
то Проводник (и не только) »
Так у нас же не Проводник, у нас NSIS. И речь про единственный параметр.

Exec — это в NSIS обёртка над ShellExecute()? Тут: Reference/Exec - NSIS (https://nsis.sourceforge.io/Reference/Exec) этого нет, но про кавычки — кое-что есть.

iglezz
29-03-2020, 01:59
Так у нас же не Проводник, у нас NSIS. И речь про единственный параметр. »
Но процесс перетаскивания файла на nsis-лаунчер будет происходить при помощи файл-менеджера. Наиболее вероятно, что это будет Проводник.
Понимание необходимости обрамлять в кавычки имя запускаемой команды, по моему, уже должно быть, поэтому уточнил только момент с параметрами, т.к. иногда встречаются "особенности" у некоторых представителей двоичного мира (wsh, total commander)




© OSzone.net 2001-2012