Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Ответить
Настройки темы
.: NSIS - все вопросы :. часть 2.

Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: kotkovets
Дата: 07-06-2020
Описание: NSIS 3.05


Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения.


Описание:
читать дальше »
NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.


Текущая версия: NSIS 3.05 от 15 декабря 2019 года
Скачать | Архив сборок версии

Первая часть этой темы
Скачать первую часть этой темы одним архивом

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В, зеркало

Документация

Утилиты разработчика
Расширение функциональности

Примеры скриптов на нашем форуме
Скрипт NSIS для перепаковки AIMP2+Сборки
Тема для Notepad++(пример парсинга XML)

Достоинства
читать дальше »


◦ Очень маленький размер установочного блока (около 34 Кбайт)
◦ zlib, bzip2 и LZMA-сжатие
◦ Гибкая система скриптов (спецально разработанная для инсталляторов)
◦ Поддержка многоязычности, точнее 53 языка, есть возможность ввода нового языка
◦ Поддержка плагинов
◦ Скрипт Препроцессор
◦ Создание Web-инсталляторов


Ещё немного полезной информации:
читать дальше »

▫ История создания установщика

NSIS создан как альтернатива InstallShield, предназначенного для коммерческих продуктов.

NSIS был создан для распространения Winamp. Он базируется на предыдущем продукте Nullsoft — PiMP (plugin Mini Packager), иначе известным как SuperPiMP. После версии 2.0a0, проект был перемещён на SourceForge.net, где к работе над ним присоединились и сторонние разработчики. NSIS 2.0 был выпущен в свет 2 года спустя.

NSIS версии 1 был очень похож на классический Windows Installer, но он был более управлемым с помощью скриптов и поддерживал другие форматы сжатия. NSIS версии 2 поддерживает новый графический интерфейс пользователя, LZMA-сжатие, многоязычность и имеет хорошую систему плагинов.

Версия 2.01 была первой версией, поддерживающей компиляцию на любой из POSIX-платформ. Это позволило создавать Windows-инсталляторы на GNU/Linux и FreeBSD без использования эмулятора Wine. На данный момент поддерживается компиляция только для Windows.

▫ Описание

Компилятор NSIS — программа makensis — компилирует скрипты в исполняемый код. Каждая строчка скрипта содержит одну команду. Пример:
Код: Выделить весь код
 # Пример скрипта
 Name "Example1"
 OutFile "example1.exe"
 InstallDir "$PROGRAMFILES\Example1"
 Page Directory
 Page InstFiles
 Section
   SetOutPath $INSTDIR
   File ..\makensis.exe
 SectionEnd

Modern User Interface

В версии 2.0 был введён новый графический интерфейс пользователя, названный Modern UI (MUI). MUI очень похож на интерфейс мастеров, он поддерживает splash screen, выбора языка, выбор компонентов для установки и более широкие возможности настройки по сравнению со своим предшественником. Пример:
Код: Выделить весь код
 # Пример скрипта с Modern UI
 !include MUI.nsh
 Name "Example 2"
 OutFile Example2.exe
 !insertmacro MUI_PAGE_WELCOME
 !insertmacro MUI_PAGE_LICENSE "license.rtf"
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_LANGUAGE "German"
 !insertmacro MUI_LANGUAGE "French"
 Section "Extract makensis"
  SetOutPath $INSTDIR
  File ..\makensis.exe
 SectionEnd
NSIS может быть расширен при помощи плагинов, которые могут быть написаны на C++, Си, и Delphi. Плагины могут быть использованы для улучшения функциональности и интерфейса инсталлятора. Плагины могут быть вызваны в любой части кода NSIS скрипта.

С пакетом NSIS поставляются несколько плагинов, позволяющих добавлять новые страницы, заменять фоновые изображения, скачивать файлы из Интернета, выполнять математические вычисления, обновлять файлы и многое другое.

▫ Программы, использующие NSIS


◦ Антивирус Касперского
◦ Qip
◦ 3DNA Desktop
◦ 7-Zip
◦ ATI Display Driver
◦ CDex
◦ Dev-C++
◦ DivX
◦ eMule FileZilla
◦ Google Picasa
◦ Google Talk
◦ Intel C (компилятор)
◦ IrfanView
◦ LightAllow
◦ LyX
◦ Miranda IM Mozilla Firefox 2.0
◦ NASA World Wind
◦ Notepad++
◦ OpenOffice.org для Windows
◦ Pidgin
◦ VLC Player
◦ Winamp

▫ Чем я могу распаковать инсталлятор, созданный в NSIS?

В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.


-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:02, 09-12-2012

 

Пользователь


Сообщения: 126
Благодарности: 7

Профиль | Отправить PM | Цитировать


Цитата K.A.V.:
Не забудьте, что nsisUnRar2 будет работать только при использовании граф. интерфейса (при исполнении из секции), может, запустите и из под .onInit, копайтесь, если хотите, мне разбираться не особо интересно в этой теме »
Ога, ща посчупаем...

Отправлено: 01:34, 10-02-2015 | #1481



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Давеча понадобилось вывести содержимое операций из консоли - в окошко NSIS...
ExecDos, как говорится, мне в помощь, вроде как всё хорошо, но оказалось всё же совсем не хорошо... А именно :

Каким образом из окна ListBox_а можно скопировать выведенные текст-данные ? Посылал ListBox на разные стили - всё бестолку...
Наивный вопрос, но без ответа - почему русские буковки в ListBox_е, у меня в виде кракозябров ? ( В ОС (W7x32) все кодовые страницы , файлы и записи реестра приведены к 1251... Толку - ноль... )
И каким образом отображать в окне ListBox_а только первые, к примеру, нужные мне 10 строк ?

Код: Выделить весь код
!include MUI2.nsh
;!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English
OutFile TOWINDOW_test.exe
Var Dlg
Var Log
Page custom myPage wait

Function myPage
nsDialogs::Create 1044
Pop $Dlg

${NSD_CreateListBox} 0 10 330u 100u $Log
Pop $Log

ExecDos::exec /NOUNLOAD /ASYNC /TOWINDOW "cmd /?" "" $Log
Pop $9

nsDialogs::Show
FunctionEnd

Function wait
ExecDos::wait $9
FunctionEnd

Section
SectionEnd
Цитата K.A.V.:
о галочке "Запуск от имени администратора" в свойствах ярлыка. »
Хорошо, что реализовал для NSIS этот известный полезный трюк. Когда то здесь уже обсуждался, но тогда без результата.

Последний раз редактировалось MKN, 10-02-2015 в 13:46.


Отправлено: 13:30, 10-02-2015 | #1482


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата MKN:
Каким образом из окна ListBox_а можно скопировать выведенные текст-данные ? Посылал ListBox на разные стили - всё бестолку... »
Я помню, как я настрадался с этим элементом в своём SFX Creator, у меня был такой же вопрос, но лично у меня не получилось получить текст в строке, поэтому...

Я нашел выход только в создании ListView элемента, после изучения которого переписал практически все диалоги в SFX Creator
Поэтому, могу тебе посоветовать плюнуть на ListBox и создать ListView элемент.

Цитата MKN:
Наивный вопрос, но без ответа - почему русские буковки в ListBox_е, у меня в виде кракозябров ? ( В ОС (W7x32) все кодовые страницы , файлы и записи реестра приведены к 1251... Толку - ноль... ) »
А вот полезно было бы читать все странички в справке, а не только те, которые тебе нужны, в справочнике, как ни странно, есть решение этой проблемы
В разделе Обучение IO: собственные странички, есть раздел Примеры диалогов, в котором есть один пример Считываем данные из консольного приложения в ListView
Посмотришь ради собственного развития)
А конкретно тебе нужна WinAPI команда OemToChar, пример использования тоже есть в справке в разделе Примеры кодов на страничке Русские символы в DOS кодировке

По поводу работы с элементом ListView - читай следующее:
1. Обучение IO: собственные странички => Элементы в диалоге => ListView: список => ListView: обычный список
2. "CommCtrl.nsh" файл найдёшь на страничке Обучение IO: собственные странички => Введение
Использовать команды взаимодействия с элементами, которые описаны в этом разделе можно не только с InstallOptions - различие лишь в том, что там в команды нужно подставить правильный HWND элемента

Цитата MKN:
И каким образом отображать в окне ListBox_а только первые, к примеру, нужные мне 10 строк ? »
Не совсем понял вопрос, но...в справке на страничке описания ListView есть в сааамом конце команда для перемотки списка, возможно, это то, о чем ты спросил...

Если что-то не поймёшь или будут вопросы - пиши, мне просто лень код накидывать, в последнее время вообще всё лень...

Цитата MKN:
Хорошо, что реализовал для NSIS этот известный полезный трюк. Когда то здесь уже обсуждался, но тогда без результата. »
не помню уже причину, по которой тогда это не реализовал, видимо, не было настроения, а потом и забыл про этот вопрос...

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 18:55, 10-02-2015 | #1483

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Цитата K.A.V.:
Обучение IO: собственные странички »
Очень не хотелось бы связываться с IO, который забраковали даже сами разрабы, как явно устаревший и во всём уступающий nsDialogs...
Цитата K.A.V.:
пример Считываем данные из консольного приложения в ListView »
Даже если пересилить себя и связаться допотопным IO, то этот способ оч громоздский по сравнению с одной строкой
ExecDos::exec /NOUNLOAD /ASYNC /TOWINDOW

Но оказалось есть интересный способ получить данные из ListBox_а (конечно не в полной мере, какой хотелось бы...), но всё же выход :

Код: Выделить весь код
OutFile ExecDos_TOWINDOW.exe
!include nsDialogs.nsh
Var Dialog
Var hcli
Var ListBox
Page custom MyPage leave

Function MyPage
nsDialogs::Create 1018
Pop $Dialog
${NSD_CreateListBox} 0 20 100% 100u "$ListBox"
Pop $ListBox
;System::Call "user32::OemToChar(t$ListBox, t.$ListBox)" #ни хрена не работает, местоположение менял...
ExecDos::exec /NOUNLOAD /ASYNC /TOWINDOW "cmd /?" "" $ListBox
Pop $hcli
nsDialogs::Show
FunctionEnd

Function leave
SendMessage $ListBox ${LB_GETCURSEL} 0 0 $1 
IntOp $1 $1 + 1
;MessageBox MB_OK $1
System::Call user32::SendMessage(i$ListBox,i${LB_GETTEXT},ir1,t.r1) 
;System::Call "user32::OemToChar(tr1, t.r1)"    # здесь работает, но здесь не надо...
MessageBox MB_OK $1 
ExecDos::wait $hcli
FunctionEnd

Section
SectionEnd
Цитата K.A.V.:
в справочнике, как ни странно, есть решение этой проблемы »
Точно так. Знал ведь , да забыл... Но почему то не работает там, где надо (см. пример в коде, комбинировал по разному - без результата... ). Может я чего опять упустил...

Цитата K.A.V.:
Не совсем понял вопрос, но...в справке на страничке описания ListView есть в сааамом конце команда для перемотки списка »
Я имел ввиду, что из консоли мне насыпится куча строк, а надо использовать только конкретные номера строк, а остальные ессно игнорировать...
Но с LB_GETCURSEL наверное может удастся это реализовать... Как - пока не придумал...

ps В доке сказано, что можно посылать данные с помощью /TOWINDOW не только в чёртов ListView :
Цитата:
Edit, RichEdit, ListView and ListBox supported
А как бы это сделать на практике ? Например, отправить инфу в окно Edit (с помощью nsDialogs ) ...

Последний раз редактировалось MKN, 11-02-2015 в 13:19.


Отправлено: 12:17, 11-02-2015 | #1484


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата MKN:
Очень не хотелось бы связываться с IO »
Цитата MKN:
Даже если пересилить себя и связаться допотопным IO »
Ты вообще читал моё сообщение или глазами по нему пробежался? Я тебе ни слова не говорил про то, чтобы использовать IO, перечитай моё сообщение ещё раз.

Цитата MKN:
Но оказалось есть интересный способ получить данные из ListBox_а»
Ты смотрел пример моего диалога в файле справки? Видимо, нет
В том примере показано, как нужно использовать ExecDos, когда тебе нужно сделать что-то с данными из консольного приложения, а не просто запихнуть весь текст в какой-то элемент
И там показано, что команду OemToChar использовать можно только для преобразования строки, но никак не для смены кодировки элемента управления, как ты пытался сделать...

ЗАМЕЧАНИЕ ДЛЯ ВСЕХ
Возьмите на заметку, если вы пользуетесь плагином ExecDos просто для вывода данных консольного приложения в элемент управления - используйте ключ /TOWINDOW или /DETAILED в зависимости от сиуации, НО, если же вам необходимо произвести какую-то манипуляция с теми данными, которые консольное приложение вам выдаёт - используйте ключ /TOSTACK или /TOFUNC, опять же, в зависимости от ситуации

Цитата MKN:
Я имел ввиду, что из консоли мне насыпится куча строк, а надо использовать только конкретные номера строк, а остальные ессно игнорировать... »
Мой пример в моём примере

Цитата MKN:
Но с LB_GETCURSEL наверное может удастся это реализовать... Как - пока не придумал... »
Я тебе ещё раз повторяю про элемент ListView, почему ты такой упёртый?

Ладно, дам тебе задание: после того, как ты свой код напишешь, всё сделаешь так, как нужно, попробуй добавить в свой любимый ListBox горизонтальную прокрутку
Хочу потом написать здесь "я же говорил" после того, как ты возьмёшься переписывать код под элемент ListView
всё готовенькое, как вы любите

Код: Выделить весь код
OutFile ExecDos_TOWINDOW.exe
!include nsDialogs.nsh
Var Dialog
Var hcli
Var ListBox
Page custom MyPage  leave

Function MyPage
nsDialogs::Create 1018
Pop $Dialog
${NSD_CreateListBox} 0 20 100% 100u "$ListBox"
Pop $ListBox


    GetFunctionAddress $0 MyFunction
    ExecDos::exec /NOUNLOAD /ASYNC /TOFUNC  `cmd /?` "" $0
    Pop $hcli

nsDialogs::Show
FunctionEnd


Function leave
    ExecDos::wait $hcli
FunctionEnd


Function MyFunction
  Pop $2
 ; в эту переменную кидается по-отдельности каждая строка, которую конс. приложение выдаёт
 ; можешь пропустить и не добавлять данные в элемент (как ты хотел, можно заюзать IntOp+StrCmp, например обнуляя переменную IntOp через каждые 3 прохода)
 ; что-то типа такого...
;IntOp $R0 $R0 + 1
;StrCmp $R0 4 0 noAddString
;StrCpy $R0 0

System::Call "user32::OemToChar(tr2, t.r2)"
SendMessage $ListBox ${LB_ADDSTRING} 0 "STR:$2"
#MessageBox MB_OK|MB_ICONINFORMATION "Добавляется строка:$\n$2"

; noAddString:
FunctionEnd


Section
SectionEnd


Цитата MKN:
ps В доке сказано, что можно посылать данные с помощью /TOWINDOW не только в чёртов ListView : »
Да лааадно? Кто-то наконец-то открыл документацию к плагину?

Цитата MKN:
А как бы это сделать на практике ? Например, отправить инфу в окно Edit »
Может, заглянешь там ещё в папку Examples? Ходят слухи, что там что-то интересное и ты будешь рад это увидеть
Я могу понять некоторых личностей, но чтобы ты ленился, MKN, стыдно должно быть
Там же в примерах всё есть, ну не сложно же открыть этот чертов ToWindow.nsi, который лежит в архиве с плагином и посмотреть, как там всё устроено, ты же не первый день с NSIS работаешь...


В этих примерах я взял стандартный блокнот (закройте копии блокнота перед запуском скомпилированного скрипта, чтобы не записало куда попало), после его запуска скрипт закидывает данные прямо в область редактирования текста (элемент Edit)
всё готовенькое (2): /TOWINDOW с иероглифами

Код: Выделить весь код
!addincludedir "."
!addplugindir "."
!include "WinMessages.nsh"

OutFile "!TEST.exe"


Function .onInit
exec "notepad"
stget:
Sleep 1000
  FindWindow $0 "notepad" ""
  StrCmp $0 "0" stget 0
  FindWindow $1 "Edit" "" $0
  StrCmp $1 "0" stget 0
  ExecDos::exec /TOWINDOW "cmd /?" "" $1
  quit
FunctionEnd


Section -post
SetAutoClose false
SectionEnd

всё готовенькое (3): /TOFUNC с обработкой строк и без иероглифов

Код: Выделить весь код
!addincludedir "."
!addplugindir "."
!include "WinMessages.nsh"

OutFile "!TEST.exe"



Function .onInit
exec "notepad"
stget:
Sleep 1000
  FindWindow $0 "notepad" ""
  StrCmp $0 "0" stget 0
  FindWindow $1 "Edit" "" $0
  StrCmp $1 "0" stget 0
    GetFunctionAddress $0 MyFunction
    ExecDos::exec /NOUNLOAD /ASYNC /TOFUNC  `cmd /?` "" $0
    pop $0
    ExecDos::wait $0
  quit
FunctionEnd

Function MyFunction
  Pop $2
System::Call "user32::OemToChar(tr2, t.r2)"
SendMessage $1 ${EM_REPLACESEL} 0 "STR:$\r$\n$2"
FunctionEnd



Section -post
SetAutoClose false
SectionEnd

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:05, 11-02-2015 | #1485

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Цитата K.A.V.:
Я тебе ни слова не говорил про то, чтобы использовать IO, перечитай моё сообщение ещё раз. »
Хмм... А как же тогда понимать :
Цитата K.A.V.:
В разделе Обучение IO: »
и т.д., включая пример "Считываем данные из консольного приложения" - сплошные IO
Понятное дело, что
Цитата:
Использовать команды взаимодействия с элементами, которые описаны в этом разделе можно не только с InstallOptions
Но этот вопрос надо сначала ещё тщательно изучить и переварить... Я с этими глистбоксами и виевирами вообще никогда не сталкивался...
Цитата K.A.V.:
Может, заглянешь там ещё в папку Examples? »
в первую очередь заглянул - ничего интересного, т.к. опять же, в том же ToWindow.nsi - чертовы IO ( ну не дело это, использовать дополнительные ini файлы)
Цитата K.A.V.:
В этих примерах я взял стандартный блокнот, после его запуска скрипт закидывает данные прямо в область редактирования текста (элемент Edit) »
Причём тут блокнот ?! Под Edit подразумевается созданная пользователем , автономная область окна, на странице NSIS...

Цитата K.A.V.:
Я тебе ещё раз повторяю про элемент ListView, почему ты такой упёртый? »
Почему упёртый... Пока не вижу в ListView достойной альтернативы (во всяком случае в данный момент для своей задачи. Может потом, когда припрёт, и оценю ) ... И код в примере из справочника велик, и опять - c IO...

А вот пример с /TOFUNC - интересный. Спасибо.

Последний раз редактировалось MKN, 11-02-2015 в 16:20.


Отправлено: 15:35, 11-02-2015 | #1486

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Цитата K.A.V.:
попробуй добавить в свой любимый ListBox горизонтальную прокрутку »
Это, как раз, давно придумано :
Код: Выделить весь код
OutFile ListBox_H-Scroll.exe
!include nsDialogs.nsh
Var Dialog
Var ReleaseNotesText
Page custom MyPage

Function MyPage
nsDialogs::Create 1018
Pop $Dialog
nsDialogs::CreateControl /NOUNLOAD ${__NSD_ListBox_CLASS} ${__NSD_ListBox_STYLE}|${WS_HSCROLL} ${__NSD_ListBox_EXSTYLE} 0 13u 262u -13u ""
Pop $ReleaseNotesText
${NSD_LB_AddString} $ReleaseNotesText "A pretty loooooooooooooooooooooooooooooooooooooooooooooooong striiiiiiiiiiing"
${NSD_LB_AddString} $ReleaseNotesText "A really long string that should be longer than the listbox that contains this message, so I can enable the horizontal scrollbar!"
SendMessage $ReleaseNotesText ${WM_GETFONT} 0 0 $R0
System::Call user32::GetDC(i$ReleaseNotesText)i.R1
System::Call gdi32::SelectObject(i$R1,i$R0)i.R0
System::Call *(i,i)i.r0
StrCpy $2 0
${NSD_LB_GetCount} $ReleaseNotesText $1
loop:
IntOp $1 $1 - 1
System::Call 'user32::SendMessage(i $ReleaseNotesText,i ${LB_GETTEXT},i $1,t.r3)'
StrLen $4 $3
System::Call 'gdi32::GetTextExtentPoint32(i $R1,t "$3",i $4,i $0)'
System::Call *$0(i.r4,i)
IntOp $4 $4 + 10 ;add a little padding
${IfThen} $4 > $2 ${|} StrCpy $2 $4 ${|}
IntCmp $1 0 "" "" loop
System::Free $0
System::Call gdi32::SelectObject(i$R1,i$R0)i
System::Call user32::ReleaseDC(i$ReleaseNotesText,i$R1)
SendMessage $ReleaseNotesText ${LB_SETHORIZONTALEXTENT} $2 0
nsDialogs::Show
FunctionEnd

Section
SectionEnd
Да. Громозда... Но зато без IO !

Отправлено: 15:59, 11-02-2015 | #1487


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата MKN:
Хмм... А как же тогда понимать : »
Цитата MKN:
и т.д., включая пример "Считываем данные из консольного приложения" - сплошные IO »
Я же тебе ясно написал:
Цитата K.A.V.:
Использовать команды взаимодействия с элементами, которые описаны в этом разделе можно не только с InstallOptions - различие лишь в том, что там в команды нужно подставить правильный HWND элемента »
Если ты читаешь мои сообщения, пропуская строки - то уж извини, какой тогда смысл мне так подробно всё расписывать и тратить своё время, если ваши глаза только готовый код видят и не читают того, что я здесь пишу?

Цитата MKN:
в первую очередь заглянул - ничего интересного, т.к. опять же, в том же ToWindow.nsi - чертовы IO »
Да какая разница, на чем пример построен, IO или nsDialogs? У плагина команда не меняется в зависимости от того, что мы используем, тебе нужно смотреть синтаксис команды и какие данные в неё подставляются:
Код: Выделить весь код
  FindWindow $0 "#32770" "" $HWNDPARENT
  GetDlgItem $R8 $0 1016
  ExecDos::exec /TOWINDOW /TIMEOUT=6000 "$EXEDIR\consApp.exe" "test_login$\ntest_pwd$\n" $R8
  Pop $R6 ; return value - process exit code or error or STILL_ACTIVE (0x103).
Здесь же прекрасно видно, что получают HWND элемента поиском окна и командой GetDlgItem, помещая результат в $R8 и далее эта переменная используется в команде с плагином...

Цитата MKN:
Причём тут блокнот ?! Под Edit подразумевается созданная пользователем , автономная область окна, на странице NSIS... »
Ты серьёзно? Ты посмотри на мой код внимательней и ещё скажи, из чего в принципе состоит графический интерфейс каждого приложения? Из множества элементов, не?
Для тебя будет открытием, если я скажу тебе, что та самая область в блокноте, в которой ты набираешь текст - это элемент Edit?
Возьми любой похожий софт типа программки "InqSoft Window Scanner", которая тебе на интерфейсе программы/инсталлятора покажет, какие в интерфейсе типы элементов и каковы их стили

А по какому принципу, ты думаешь, работает мой код? Именно по тому, что сначала ищет окно конкретной программы (в моём случае блокнот), а затем уже ищет элемент Edit в этом самом родительском окне...Я же не мог тебе предоставить код, который бы искал не понятно где в системе элемент Edit и запихивал туда данные, ну а писать специально для этого пример на nsDialogs или IO с интерфейсом NSIS мне лень, честно говоря...кода меньше и наглядно всё видно, без лишних строк
Код: Выделить весь код
stget:
Sleep 1000
  FindWindow $0 "notepad" ""
  StrCmp $0 "0" stget 0
  FindWindow $1 "Edit" "" $0
  StrCmp $1 "0" stget 0
Цитата MKN:
и опять - c IO... »
промолчу...всё выше написал

Цитата MKN:
Это, как раз, давно придумано : »
какая жесть, не удивительно, что я не додумался до этого в то время...

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 16:15, 11-02-2015 | #1488

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


K.A.V.,
Цитата K.A.V.:
Если ты читаешь мои сообщения, пропуская строки - то уж извини, какой тогда смысл мне так подробно всё расписывать »
Я внимательно читаю твои сообщения, откуда черпаю много полезного. Но ListBox и ListView, для меня совершенно новы и не знакомы... Ну не приходилось с ними ещё работать, потому и много вопросов и недоумений. И конечно понятное дело, что всё связанное с IO можно использовать и с nsDialogs. Только это надо сначала изучить и осознать, что требует времени, терпения и усидчивости... Со всем этим , как оказалось - проблемы... Но, не без твоей помощи, проблемы эти преодолеваются. А роль наставника и учителя требует терпения и снисходительности к ученикам. Этих качеств , как мне кажется, многие пользователи NSIS темы и тебе желают.

PS После адаптации примера с консолью из справочника под nsDialogs, получаю при компиляции :
Цитата:
!verbose: Invalid verbose level
Error in macro __NSD_LV_InsertColumn_Call on macroline 2
т.е. ругается на строку в коде : ${NSD_LV_InsertItem} $ListView "0" "$1"

Такую же ошибку получаю и при компиляции примера из http://nsis.sourceforge.net/Header_file_for_Listview
Может CommCtrl.nsh не дружит с NSIS3 ? (2.46 нет под рукой)

ps2 Да, не дружит... Проверил на 2.46 - всё нормально компилится с примером из http://nsis.sourceforge.net/Header_file_for_Listview
Адаптированный пример из справочника, рисует только пустой Listview... Видать что то не доадаптировал... Ну да то ладно... Что делать с CommCtrl.nsh в NSIS3 ?
Может можно вообще отказаться от CommCtrl.nsh ? Там всего то не большой кусок кода используется. Состряпать макрос из него...

Последний раз редактировалось MKN, 11-02-2015 в 18:24.


Отправлено: 16:28, 11-02-2015 | #1489


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата MKN:
Что делать с CommCtrl.nsh в NSIS3 ? »
Всё отлично там работает, не надо тут панику разводить)

Цитата MKN:
т.е. ругается на строку в коде : ${NSD_LV_InsertItem} $ListView "0" "$1" »
Заставить тебя ещё раз мои сообщения прочитать?
Вот ты говоришь о терпении учителя, да какой тут, когда ты пишешь, как нужно сделать, а человек делает по-своему...

Цитата K.A.V.:
2. "CommCtrl.nsh" файл найдёшь на страничке Обучение IO: собственные странички => Введение »

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 18:26, 11-02-2015 | #1490



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 dimadr Наборы обновлений для Windows XP/2003/Windows 7 267 14-02-2020 08:25
[архив].: NSIS - все вопросы :. kotkovets Автоматическая установка приложений 3387 09-12-2012 11:56
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 jameszero Наборы обновлений для Windows XP/2003/Windows 7 1491 22-07-2011 22:42
Выбор|модернизация процессора .:[все вопросы]:. Часть I Myxa Выбор отдельных компонентов компьютера и конфигурации в целом 1845 01-01-2011 19:18
Вопросы по создателю инсталляций NSIS MaxDELETE Программное обеспечение Windows 14 04-07-2007 10:01




 
Переход