Показать полную графическую версию : [архив].: NSIS - все вопросы :.
\Program Files\NSIS\Docs\System\System.html
+
Calling an external DLL using the System.dll plugin (http://nsis.sourceforge.net/Calling_an_external_DLL_using_the_System.dll_plugin)
NoName01.cpp
02-02-2010, 21:50
У меня такая проблемка.
Можно ли прочитать имена (не значения) всех параметров одного из разделов реестра?
NoName01.cpp,
StrCpy $0 0
loop:
ClearErrors
EnumRegValue $1 HKLM Software\Microsoft\Windows\CurrentVersion $0
IfErrors done
IntOp $0 $0 + 1
ReadRegStr $2 HKLM Software\Microsoft\Windows\CurrentVersion $1
MessageBox MB_YESNO|MB_ICONQUESTION "$1 = $2$\n$\nMore?" IDYES loop
done:
2all
Новая статейка: Создание своего инсталлятора на NSIS. Ассоциации файлов. Макросы (http://www.winreview.ru/comment.php?comment.news.266). Если есть что дополнить - пишите.
Доброго дня.
Подскажите кто нибудь сумел прикрутить библиотеку 7z.dll к nsis?
Меня интересует как использовать функции которые она содержит:
- 7z::CreateObject
- 7z::GetHandlerProperty
- 7z::GetHandlerProperty2
- 7z::GetMethodProperty
- 7z::GetNumberOfFormats
- 7z::GetNumberOfMethods
- 7z::SetLargePageMode
Полезный советик.
Не пинайте, если уже обсуждалось.
Думаю, некоторые сталкивались с проблемой отображения приветствия в первом окне инсталятора, если имя и версия устанавливаемого приложения слишком длинные. Чтобы не извращатся над именем программы, дописывать дополнительные строки в стандартный скрипт, менять шрифт инсталятора и т.д., нашел, имхо, самый легкий выход из этого положения.
Если используете NSIS 2.46, интерфейс "MUI.nsh", то в файле ...\NSIS\Contrib\Modern UI\ioSpecial.ini, в 13 и 14 строках, вместо Left=120 и Right=315 прописываете соответственно Left=116 и Right=326. Всё! Получится, примерно, так:
http://10pix.ru/img1/35621/775984.th.png (http://10pix.ru/view/35621/775984/)
Интерфейс от этого практически не пострадал, зато, под имя/версию теперь выделена целая строка, большенство длинных названий влезет...
У меня такая проблемка.
Можно ли прочитать имена (не значения) всех параметров одного из разделов реестра? »
Обращаюсь ещё раз ко всем, особенно к новичкам, не ленитесь посидеть недельку и потестить функции, которые описаны в файле справки к NSIS, там всё доходчиво расписано, при применении какой функции какой будет результат.
Задавать вопросы, которые описаны в файле справки, это совсем не дело...
Подскажите кто нибудь сумел прикрутить библиотеку 7z.dll к nsis?
Меня интересует как использовать функции которые она содержит: »
А оно кому-нибудь нужно? O_o
1. Чтобы DLL взаимодействовала с вашим инсталлятором (имею ввиду чтобы функции библиотеки принимали и отдавали значения) необходимо, чтобы сама DLL была написана специальным образом (там добавляются специальные функции)
2. Если DLL не написана специально для языка NSIS (т.е. это не плагин к NSIS), как в нашем случае, то для того, чтобы передать и получить данные в/из функции, необходимо вызывать функции библиотек через System.dll
Полезный советик. »
Да, для кого-то он полезен, данный файл предназначен для настройки отображения страницы приветствия.
Не хотите более подробно описать, за что отвечает каждый элемент в данном файле конфигурации?
hb860 знает, почему я это говорю ;) :) :) :)
Да, кстати, hb860 единственное пожелание к статьям, это то, как ты выделяешь двойные кавычки... #23 (http://forum.oszone.net/post-1225268-23.html)
единственное пожелание к статьям »
Я так делаю, потому что:
1. их так лучше видно в Notepad++
2. это способ экранирования в NSIS спецсимоволов. Люблю единую системы экранирования. Да, я знаю про одинарные и двойные, но предпочитаю использовать $\"это$\".
Не хотите более подробно описать, за что отвечает каждый элемент в данном файле конфигурации? »
Я не настолько подкован, чтобы писать мануалы :). Действовал методом тыка...
Понял, что:
[Field 1] - это координаты для картинки
[Field 2] - координаты для приветствия, то что жирным шрифтом
[Field 3] - координаты для остального текста
NumFields=3 - по видимому, количество элементов
Количество элементов на странице, с помощью ioSpecial.ini, можно увеличивать, как на странице приветствия, так и на финишной странице. Например, линк на сайт. Примеры здесь (http://nsis.sourceforge.net/Add_link_to_welcome_page_(MUI)) и здесь (http://forums.winamp.com/showthread.php?postid=2172349).
Вот и все мои познания :)
Цитата andreyl:
Подскажите кто нибудь сумел прикрутить библиотеку 7z.dll к nsis?
Меня интересует как использовать функции которые она содержит: »
А оно кому-нибудь нужно? O_o
1. Чтобы DLL взаимодействовала с вашим инсталлятором (имею ввиду чтобы функции библиотеки принимали и отдавали значения) необходимо, чтобы сама DLL была написана специальным образом (там добавляются специальные функции)
2. Если DLL не написана специально для языка NSIS (т.е. это не плагин к NSIS), как в нашем случае, то для того, чтобы передать и получить данные в/из функции, необходимо вызывать функции библиотек через System.dll »
Спасибо за совет, теперь хотя-бы ошибки при старте нет.
Но вызов через System::Call "7z::CreateObject()" ни чего не дал.
Параметров я все-же не знаю.
Когда вызываются функции библиотек с помощью System.dll, предполагается, что вызываемая библиотека должна находиться в системном каталоге (System32), в нашем случае, в System32 должна находиться библиотека 7z.dll
Параметров я все-же не знаю. »
Здесь я вам тоже ничего посоветовать не могу, т.к. не вникал в синтаксис System.dll
Painkiller
08-02-2010, 18:16
K.A.V. , как там на счёт кода когда при выборе компонента отображалась картинка? Очень надо
Painkiller, я сейчас занят...просто нет свободного времени, как будет так посмотрю (возможно даже завтра)
NoName01.cpp
08-02-2010, 22:20
Люди, а можно на nsis написать обработчик нажатий клавиш?
нажатий где ? в окне или глобально в системе ?
и самое главное - зачем ??
Люди, а можно на nsis написать обработчик нажатий клавиш? »
:o
NSIS пора наверно С/С++ вытеснять? :lol:
Не пробовал, но в самом NSIS вы такого не напишите, можно написать библиотеку на С/С++ и вызывать её, но мне кажется маловероятным использование данной библиотеки, например, на странице выбора компонентов....
Показываем картинки на странице выбора компонентов при наведении курсора мыши на компоненты
Необходимо внести изменения в файл интерфейса (\Program Files\NSIS\Contrib\UIs\modern.exe)
Открываем данный файл с помощью ResHacker, переходим в диалог 105
Создаём элемент "BITMAP", устанавливаем ему идентификатор (поле ID), например 9999
*Вот только в этом неудобство, приходится подгонять, если добавлять элемент в диалог 104 (где и есть выбор компонентов), то при компиляции вы получите сообщение об ошибке
На этом редактирование файла интерфейса закончено (ну только вам нужно правильно подогнать расположение элемента), сохраняем изменения и закрываем ResHacker
Открываем файл \Program Files\NSIS\Contrib\Modern UI\System.nsh (можно скопировать данный файл в каталог с вашим скриптом и редактировать его, чтобы не распростарнять изменения на ваши последующие скрипты, НО при этом, необходимо заменить строку !include "MUI.nsh" в вашем скрипте на !include "System.nsh"), ищем в данном файле строку
!insertmacro MUI_DESCRIPTION_BEGIN
После неё, вставляем код
StrCmp $0 ${section1} 0 +2
SetBrandingImage /IMGID=9999 "$exedir\MODERNUI\Addons\Images\SEC57.bmp"
StrCmp $0 ${section2} 0 +2
SetBrandingImage /IMGID=9999 "$exedir\MODERNUI\Addons\Images\SEC66.bmp"
StrCmp $0 ${section3} 0 +2
SetBrandingImage /IMGID=9999 "$exedir\MODERNUI\Addons\Images\SEC69.bmp"
StrCmp $0 ${section4} 0 +2
SetBrandingImage /IMGID=9999 "$exedir\MODERNUI\Addons\Images\SEC75.bmp"
Думаю здесь всё понятно?
9999 - идентификатор добавленного нами элемента
sectionX - идентификаторы секций
Ну а пути к файлам прописываем полные... :)
Да кстати, только BMP файлы, и как я писал раньше, все изображения должны быть одного разрешения, иначе получите глюки ;)
Ещё не устали? Это ещё не всё! :tongue:
Находим строчки, где прописаны какие странички инсталлера показывать (в вашем скрипте)
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
page custom MyCustom
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
Строчка, выделенная красным цветом обязательна! Если вы её не добавите, то ваши же изображения потом отобразятся на следующих страничках :) Короче говоря избавляемся от глюков ;)
Ну и последнее, добавляем функцию, которая и скрывает этот элемент (в вашем скрипте)
Function MyCustom
!include WinMessages.nsh
GetDlgItem $0 $HWNDPARENT 9999
ShowWindow $0 ${SW_HIDE}
FunctionEnd
Ну вообщем тестируйте сами, всю инфу которая нужна была - я выложил :)
И не смейте потом где-нибудь писать, что вы сами реализовали данную возможность! :aggressiv ;)
NoName01.cpp
09-02-2010, 17:08
нажатий где ? в окне или глобально в системе ?
и самое главное - зачем ?? »
Например, что бы при нажитии какой-нибудь комбинации клавиш появлялась такая-то страница.
Показываем картинки на странице выбора компонентов при наведении курсора мыши на компоненты »
Ты просто мегачеловечище...... Обязательно в шапку. Т.к. после пары неудачных идей, я забил на всё это дело :sorry: , не справился, сделал просто вызов файла с описанием(скриншоты, текст, указатели), но данный пример одназначно применим, за что ещё раз спасибо.
Обязательно в шапку. »
Конечно
Уважаемый K.A.V., пару страниц назад задавал вам вопрос по поводу создания лога установки инсталятора нсис изменить скрипт которого нет возможности (есть ток скомпилированный вариант) вы вроде дали довольно понятное разъяснение на основе которого я сделал скрипт, но лог так и не получил :(, может я что не так сделал?
Вот скрипт:
!define PRODUCT_NAME "Nsis лог"
!define PRODUCT_VERSION "1.0"
;includes
!include "MUI.nsh"
!include "FileFunc.nsh"
!include "LogicLib.nsh"
SetCompressor /SOLID lzma
; MUI Settings
!define MUI_ABORTWARNING
;!define MUI_ICON "ico.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; Finish page
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
; Language files
!insertmacro MUI_LANGUAGE "Russian"
!define LVM_GETITEMCOUNT 0x1004
!define LVM_GETITEMTEXT 0x102D
Name "${PRODUCT_NAME}"
OutFile "${PRODUCT_NAME}.exe"
Function DumpLog
Exch $5
Push $0
Push $1
Push $2
Push $3
Push $4
Push $6
FindWindow $0 "#32770" "Заголовок окна files" ""
GetDlgItem $0 $0 1016
StrCmp $0 0 error
FileOpen $5 $5 "w"
StrCmp $5 0 error
SendMessage $0 ${LVM_GETITEMCOUNT} 0 0 $6
System::Alloc ${NSIS_MAX_STRLEN}
Pop $3
StrCpy $2 0
System::Call "*(i, i, i, i, i, i, i, i, i) i \
(0, 0, 0, 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1"
loop: StrCmp $2 $6 done
System::Call "User32::SendMessageA(i, i, i, i) i \
($0, ${LVM_GETITEMTEXT}, $2, r1)"
System::Call "*$3(&t${NSIS_MAX_STRLEN} .r4)"
FileWrite $5 "$4$\r$\n"
IntOp $2 $2 + 1
Goto loop
done:
FileClose $5
System::Free $1
System::Free $3
Goto exit
error:
MessageBox MB_OK error
exit:
Pop $6
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
Exch $5
FunctionEnd
Section "Inst"
SetOutPath "$TEMP\files\"
File /r "Files.exe"
Exec "$TEMP\files\files.exe"
SectionEnd
Section "-Post"
push "$DESKTOP\LOG.log"
Call DumpLog
SectionEnd
Заранее благодарен...
да забыл сказать что после выполнения полученной программы получаю красивое окошко с заголовком "error" и одной кнопочкой "ОК" (которое предусмотрено в скрипте)
как сделать чтобы при создании ярлыка он запускался от имени админа
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC