Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Nullsoft Scriptable Install System | NSIS

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

Nep



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

 
NSIS (Nullsoft Scriptable Install System)
Скриптовая система создания инсталляционных пакетов от авторов Winamp

Основные характеристики:
 
  • Размер дистрибутива около 1,5 МБ
  • Наличие в базовом пакете файлов с примерами и подробной справки
  • Чрезвычайная гибкость при создании инсталляций для своих программ
  • Открытый исходный код
  • Использование различных алгоритмов сжатия (ZLIB, BZIP2, LZMA)
  • Наличие различных плагинов
     
    Новейшая версия ветки 2.х: NSIS 2.51 (от 1 апреля 2016 г., статус ветки - Old Releases)
    Новейшая версия ветки 3.х: NSIS 3.11 (от 5 марта 2025 г.)  
     
     
    Ссылки:
    NSIS: страница загрузкирусификатор ветки 2.xx (без гарантии, что подходит!)2.513.10NSIS 3 Pre-releaseNSIS 2 Pre-releaseисходники (SVN)
     
    Дополнительно: [ плагины, примеры и полезности ] • [ форум разрабочиков ] • [ Wiki ]
     
    Редактор для скриптового языка NSIS: [ скачать ] • [ домашняя страница ]
     
    NSIS Unpacker
    7-zip начиная с версии 4.40 beta поддерживает распаковку из некоторых типов инсталляций.  
    Обратите внимание, что 7za не поддерживает распаковку.
     
    Полноценного русификатора пока нет, но кто хочет, может перевести сообщения в исходных текстах NSIS и скомпилировать всё заново – это единственный корректный вариант. Из файлов поддаётся корректному переводу только меню интегратора NSIS, поскольку там HTML, а остальные переводы – это в основном "русификаторы" с непредсказуемыми последствиями применения.
     
    64-х битное развитие идей NSIS. В разработке, аннотация разработчика nsisbi.
     
    Просьба к тем, кто будет править шапку, сначала сверяться с http://nsis.sourceforge.net/Main_Page и не выдавать желаемое за действительное.

  • Всего записей: 41940 | Зарегистр. 24-06-2001 | Отправлено: 14:21 06-10-2001 | Исправлено: DimmY, 21:38 09-03-2025
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    pressF
     
    Не всегда:
     
    1) Нет, если использован вызов regsvr32 <DLL> то он просто зовёт функцию регистрации библиотек из ядра которая читает регистрационные данные из тела DLL и пишет их в конфиг;  
     
    2) Да, если в коде скрипта содержатся строчные записи Реестра;
     
    3) Условно да, если скрипт модифицирует текстовые файлы, то в ряде случаев можно видеть что будет записано, но если строка записи считается, то придётся смотреть всю  цепочку счёта.
     


    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 35380 | Зарегистр. 31-07-2002 | Отправлено: 14:43 28-07-2024
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    pressF

    Цитата:
    узнать какие настройки использует установщик кроме копирования файлов программы в system32? он что-то прописывает в винде для регистрации файлов

     - Обычно находится  любой программой мониторинга установки(см. изменения в реестре).  
    Как это реализовано в самом скрипте, увидеть не всегда возможно(да и зачем, если можно мониторить установку ?). Если для регистрации применяются макросы, то в скрипте их вообще увидеть нельзя...
     

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 14:05 31-07-2024 | Исправлено: MKN, 14:09 31-07-2024
    heloy2010

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    есть вариант узнать какие настройки использует установщик кроме копирования файлов программы в system32? он что-то прописывает в винде для регистрации файлов после копирования но найти не получается

    Единственно адекватная программа для этих целей, это Total Uninstall Pro от Гаврилы. В созданном снимке системы, будут видны все изменения, как на ладони. Причем изменения в реестре, можно легко сохранять в файлы реестра. Других программ такого уровня, пока не существует.

    Всего записей: 355 | Зарегистр. 17-05-2019 | Отправлено: 13:29 27-08-2024
    RadoXX

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет! Подскажите пожалуйста что подправить в данном коде,чтобы получится инсталлятор следующего вида?
     
    Цель сделать вот такой.
     
       
     
    У меня получается вот такой.
     
       
     
     

    Код:
     
     
    ;Include Modern UI
     
      !include "MUI2.nsh"
     
    ;--------------------------------
    ;General
     
      ;Name and file
      Name "Modern UI Test"
      OutFile "HeaderBitmap.exe"
      Unicode True
     
      ;Default installation folder
      InstallDir "$LOCALAPPDATA\Modern UI Test"
       
      ;Get installation folder from registry if available
      InstallDirRegKey HKCU "Software\Modern UI Test" ""
     
      ;Request application privileges for Windows Vista
      RequestExecutionLevel user
     
    ;--------------------------------
    ;Interface Configuration
     
      !define MUI_HEADERIMAGE
      !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" ; optional
      !define MUI_ABORTWARNING
     
    ;--------------------------------
    ;Pages
     
      !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
      !insertmacro MUI_PAGE_COMPONENTS
      !insertmacro MUI_PAGE_DIRECTORY
      !insertmacro MUI_PAGE_INSTFILES
       
      !insertmacro MUI_UNPAGE_CONFIRM
      !insertmacro MUI_UNPAGE_INSTFILES
       
    ;--------------------------------
    ;Languages
     
      !insertmacro MUI_LANGUAGE "English"
     
    ;--------------------------------
    ;Installer Sections
     
    Section "Dummy Section" SecDummy
     
      SetOutPath "$INSTDIR"
       
      ;ADD YOUR OWN FILES HERE...
       
      ;Store installation folder
      WriteRegStr HKCU "Software\Modern UI Test" "" $INSTDIR
       
      ;Create uninstaller
      WriteUninstaller "$INSTDIR\Uninstall.exe"
     
    SectionEnd
     
    ;--------------------------------
    ;Descriptions
     
      ;Language strings
      LangString DESC_SecDummy ${LANG_ENGLISH} "A test section."
     
      ;Assign language strings to sections
      !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
        !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
      !insertmacro MUI_FUNCTION_DESCRIPTION_END
     
    ;--------------------------------
    ;Uninstaller Section
     
    Section "Uninstall"
     
      ;ADD YOUR OWN FILES HERE...
     
      Delete "$INSTDIR\Uninstall.exe"
     
      RMDir "$INSTDIR"
     
      DeleteRegKey /ifempty HKCU "Software\Modern UI Test"
     
    SectionEnd
     
     

     
     
    Заранее большое спасибо!

    Всего записей: 6 | Зарегистр. 01-04-2017 | Отправлено: 00:11 01-02-2025
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RadoXX см. на oszone...

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 09:44 02-02-2025
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RadoXX
     
    Вам придётся править код ./Contrib/Modern UI 2/Interface.nsh или писать свой аналог.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 35380 | Зарегистр. 31-07-2002 | Отправлено: 02:29 03-02-2025
    RadoXX

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
     
     
    Вам придётся править код ./Contrib/Modern UI 2/Interface.nsh или писать свой аналог.
     
     

     
    Подскажите пожалуйста что в коде поправить нужно. Заранне спасибо!
     

    Код:
     
    Var mui.Header.Text
    Var mui.Header.Text.Font
    Var mui.Header.SubText
    Var mui.Header.Background
    Var mui.Header.Image
     
    Var mui.Branding.Text
    Var mui.Branding.Background
     
    Var mui.Line.Standard
    Var mui.Line.FullWindow
     
    Var mui.Button.Next
    Var mui.Button.Cancel
    Var mui.Button.Back
     
     
    ;--------------------------------
    ;General interface settings
     
    !macro MUI_INTERFACE
     
      !ifndef MUI_INTERFACE
     
        !define MUI_INTERFACE
     
        ;These values are set after the interface settings in the script,
        ;so the script itself can override all values.
     
        ;Default interface settings in nsisconf.nsh
        !ifdef MUI_INSERT_NSISCONF
          !insertmacro MUI_NSISCONF
        !endif
     
        ;Default interface settings
        !insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe"
        !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
        !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe"
        !insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
        !insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
        !insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"
        !insertmacro MUI_DEFAULT MUI_TEXTCOLOR "000000"
     
        ;Map *_NOSTRETCH legacy define to the correct *_STRETCH value
        !verbose push 2
        !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_HEADERIMAGE_ ""
        !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_WELCOMEFINISHPAGE_ ""
        !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_UNWELCOMEFINISHPAGE_ ""
        !verbose pop
     
        ;Default header images
        !ifdef MUI_HEADERIMAGE
     
          !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp"
          !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP_STRETCH "FitControl"
          !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH}
     
          !ifndef MUI_HEADERIMAGE_UNBITMAP
            !define MUI_HEADERIMAGE_UNBITMAP "${MUI_HEADERIMAGE_BITMAP}"
            !insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH}
          !endif
     
          !if "${MUI_HEADERIMAGE_BITMAP}" == ""
            !error "Invalid MUI_HEADERIMAGE_BITMAP"
          !endif
          !if "${MUI_HEADERIMAGE_UNBITMAP}" == ""
            !error "Invalid MUI_HEADERIMAGE_UNBITMAP"
          !endif
     
          !ifdef MUI_HEADERIMAGE_BITMAP_RTL
            !ifndef MUI_HEADERIMAGE_UNBITMAP_RTL
              !define MUI_HEADERIMAGE_UNBITMAP_RTL "${MUI_HEADERIMAGE_BITMAP_RTL}"
              !insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_RTL_STRETCH}
            !endif
     
            !if "${MUI_HEADERIMAGE_BITMAP_RTL}" == ""
              !error "Invalid MUI_HEADERIMAGE_BITMAP_RTL"
            !endif
            !if "${MUI_HEADERIMAGE_UNBITMAP_RTL}" == ""
              !error "Invalid MUI_HEADERIMAGE_UNBITMAP_RTL"
            !endif
          !endif
     
          !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_UNBITMAP_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH}
          !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_UNBITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_RTL_STRETCH}
     
        !endif
     
        ;Default texts
        !insertmacro MUI_DEFAULT MUI_ABORTWARNING_TEXT "$(MUI_TEXT_ABORTWARNING)"
        !insertmacro MUI_DEFAULT MUI_UNABORTWARNING_TEXT "$(MUI_UNTEXT_ABORTWARNING)"  
     
        ;Apply settings
     
        XPStyle On ;XP style setting in manifest resource
     
        ;Dialog resources
        ChangeUI all "${MUI_UI}"  
        !ifdef MUI_HEADERIMAGE
          !ifndef MUI_HEADERIMAGE_RIGHT
            ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE}"
          !else
            ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE_RIGHT}"
          !endif
        !endif
     
        ;Icons
        Icon "${MUI_ICON}"
        UninstallIcon "${MUI_UNICON}"
     
      !endif
     
    !macroend
     
     
    ;--------------------------------
    ;Abort warning message box
     
    !macro MUI_ABORTWARNING
     
      !ifdef MUI_ABORTWARNING_CANCEL_DEFAULT
        MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_ABORTWARNING_TEXT}" IDYES mui.Quit
      !else
        MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_ABORTWARNING_TEXT}" IDYES mui.Quit
      !endif
       
      Abort
      mui.Quit:
     
    !macroend
     
    !macro MUI_UNABORTWARNING
     
      !ifdef MUI_UNABORTWARNING_CANCEL_DEFAULT
        MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_UNABORTWARNING_TEXT}" IDYES mui.Quit
      !else
        MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_UNABORTWARNING_TEXT}" IDYES mui.Quit
      !endif
     
      Abort
      mui.Quit:
     
    !macroend
     
     
    ;--------------------------------
    ;Initialization of GUI
     
    !macro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO MACRO
     
      !ifdef MUI_HEADERIMAGE_RIGHT
        !ifndef MUI_OPTIMIZE_ALWAYSLTR ; Undocumented
          ${if} $(^RTL) == 1
            !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Left Leak
          ${Else}
            !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Right Leak
          ${EndIf}
        !else
          !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Right Leak
        !endif
      !else
        !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Auto Leak
      !endif
     
    !macroend
    !macro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE UN RTL IMGRESID PATH
     
      GetDlgItem $mui.Header.Image $HWNDPARENT ${IMGRESID} ; This variable is not used by every mode but we have to reference it to avoid a compiler warning.
     
      !if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "NoStretchNoCropNoAlign"
     
        SetBrandingImage /IMGID=${IMGRESID} "${PATH}"
     
      !else if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "NoStretchNoCrop"
     
        !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO \
          MUI_LOADANDXALIGNIMAGE
     
      !else if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "AspectFitHeight"
     
        !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO \
          MUI_LOADANDASPECTSTRETCHIMAGETOCONTROLHEIGHT
     
      !else
     
        !if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" != "FitControl"
          !warning 'MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH set to unknown value, defaulting to FitControl'
        !endif
        SetBrandingImage /IMGID=${IMGRESID} /RESIZETOFIT "${PATH}"
     
      !endif
     
    !macroend
     
    !macro MUI_HEADERIMAGE_INIT UN IMGRESID
     
      ;Load and display header image
     
      !ifdef MUI_HEADERIMAGE
     
        InitPluginsDir
     
        !ifdef MUI_HEADERIMAGE_${UN}BITMAP_RTL
          ${if} $(^RTL) == 1
     
            File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UN}BITMAP_RTL}"
            !pragma verifyloadimage "${MUI_HEADERIMAGE_${UN}BITMAP_RTL}"
            !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE "${UN}" "_RTL" ${IMGRESID} "$PLUGINSDIR\modern-header.bmp"
     
          ${else}
        !endif
     
            File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UN}BITMAP}"
            !pragma verifyloadimage "${MUI_HEADERIMAGE_${UN}BITMAP}"
            !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE "${UN}" "" ${IMGRESID} "$PLUGINSDIR\modern-header.bmp"
     
        !ifdef MUI_HEADERIMAGE_${UN}BITMAP_RTL
          ${endif}
        !endif
     
      !endif
     
    !macroend
     
    !macro MUI_GUIINIT_OUTERDIALOG UNINSTALLER
     
      ;Initialize outer dialog (fonts & colors)
     
      ;Header
      GetDlgItem $mui.Header.Text $HWNDPARENT 1037
      CreateFont $mui.Header.Text.Font "$(^Font)" "$(^FontSize)" "700"
      SendMessage $mui.Header.Text ${WM_SETFONT} $mui.Header.Text.Font 0
     
      GetDlgItem $mui.Header.SubText $HWNDPARENT 1038
     
      !ifndef MUI_HEADER_TRANSPARENT_TEXT
        SetCtlColors $mui.Header.Text "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}"
        SetCtlColors $mui.Header.SubText "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}"
      !else
        SetCtlColors $mui.Header.Text "${MUI_TEXTCOLOR}" "transparent"
        SetCtlColors $mui.Header.SubText "${MUI_TEXTCOLOR}" "transparent"
      !endif
     
      ;Header image
      !insertmacro MUI_HEADERIMAGE_INIT "${UNINSTALLER}" 1046
     
      ;Header background
      GetDlgItem $mui.Header.Background $HWNDPARENT 1034
      SetCtlColors $mui.Header.Background "" "${MUI_BGCOLOR}"
     
      ;Header icon image background
      !ifndef MUI_HEADERIMAGE
        GetDlgItem $mui.Header.Image $HWNDPARENT 1039
        SetCtlColors $mui.Header.Image "" "${MUI_BGCOLOR}"
      !endif
     
      ;Branding text
      GetDlgItem $mui.Branding.Background $HWNDPARENT 1028
      SetCtlColors $mui.Branding.Background /BRANDING
      GetDlgItem $mui.Branding.Text $HWNDPARENT 1256
      SetCtlColors $mui.Branding.Text /BRANDING
      SendMessage $mui.Branding.Text ${WM_SETTEXT} 0 "STR:$(^Branding) "
     
      ;Lines
      GetDlgItem $mui.Line.Standard $HWNDPARENT 1035
      GetDlgItem $mui.Line.FullWindow $HWNDPARENT 1045
     
      ;Buttons
      GetDlgItem $mui.Button.Next $HWNDPARENT 1
      GetDlgItem $mui.Button.Cancel $HWNDPARENT 2
      GetDlgItem $mui.Button.Back $HWNDPARENT 3
     
    !macroend
     
     
    ;--------------------------------
    ;Interface functions
     
    !macro MUI_FUNCTION_GUIINIT
     
      Function .onGUIInit
     
        !insertmacro MUI_GUIINIT_OUTERDIALOG ""
     
        !ifdef MUI_PAGE_FUNCTION_GUIINIT
          Call "${MUI_PAGE_FUNCTION_GUIINIT}"
        !endif  
     
        !ifdef MUI_CUSTOMFUNCTION_GUIINIT
          Call "${MUI_CUSTOMFUNCTION_GUIINIT}"
        !endif
     
      FunctionEnd
     
    !macroend
     
    !macro MUI_UNFUNCTION_GUIINIT
     
      Function un.onGUIInit  
     
        !insertmacro MUI_GUIINIT_OUTERDIALOG UN
         
        !ifdef MUI_UNPAGE_FUNCTION_GUIINIT
          Call "${MUI_UNPAGE_FUNCTION_GUIINIT}"
        !endif    
     
        !ifdef MUI_CUSTOMFUNCTION_UNGUIINIT
          Call "${MUI_CUSTOMFUNCTION_UNGUIINIT}"
        !endif
     
      FunctionEnd
     
    !macroend
     
    !macro MUI_FUNCTION_ABORTWARNING
     
      Function .onUserAbort
       
        !ifdef MUI_PAGE_FUNCTION_ABORTWARNING
          Call ${MUI_PAGE_FUNCTION_ABORTWARNING}
        !endif
       
        !ifdef MUI_ABORTWARNING
          !insertmacro MUI_ABORTWARNING
        !endif
         
        !ifdef MUI_CUSTOMFUNCTION_ABORT
          Call "${MUI_CUSTOMFUNCTION_ABORT}"
        !endif
         
      FunctionEnd
     
    !macroend
     
    !macro MUI_FUNCTION_UNABORTWARNING
     
      Function un.onUserAbort
       
        !ifdef MUI_UNPAGE_FUNCTION_ABORTWARNING
          Call ${MUI_UNPAGE_FUNCTION_ABORTWARNING}
        !endif  
       
        !ifdef MUI_UNABORTWARNING
          !insertmacro MUI_UNABORTWARNING
        !endif
         
        !ifdef MUI_CUSTOMFUNCTION_UNABORT
          Call "${MUI_CUSTOMFUNCTION_UNABORT}"
        !endif
         
      FunctionEnd
     
    !macroend
     

    Всего записей: 6 | Зарегистр. 01-04-2017 | Отправлено: 14:46 06-02-2025
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RadoXX
    Тебе ведь код для примера уже дан... См. на oszone

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 17:53 06-02-2025
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто знает, как практически организовать ToolTips Unicode ? Имеющиеся плагины и доступный код - только для ANSI...  Совсем беда...

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 17:34 04-11-2025
    Bannan



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Кто знает, как практически организовать ToolTips Unicode ?


    Код:
    ;
    ; Кодировка сценария UTF-8 with BOM !!!
    ;
     
    Unicode true
     
    !include nsDialogs.nsh
     
    Name "Unicode_tooltips"
    OutFile "Unicode_tooltips.exe"
    XPStyle on
     
    Var Link
    Var TipWnd
     
    Page custom nsDialogsPage
    Page instfiles
     
    ; === Таймер ===
    Function OnTimer
      ${Unless} $TipWnd <> 0
        System::Call USER32::CreateWindowEx(i0x00000008,t"tooltips_class32",i,i0x80000000,i,i,i,i,i,i,i0,i)i.s
        Pop $TipWnd
      ${EndUnless}
     
      System::Alloc 16
      Pop $0
     
      ; Получаем координаты курсора
      System::Call USER32::GetCursorPos(ir0)
      System::Call *$0(i.r1,i.r2)
      System::Free $0
      System::Call USER32::WindowFromPoint(ir1,ir2)i.r1
     
      ${If} $1 == $Link
        ; === Подсказка ===
        StrCpy $R1 "Открыть страницу в браузере"
        ; === Создаём структуру TOOLINFO (Unicode) ===
        FindWindow $3 "#32770" "" $HWNDPARENT
        System::Call *(i44,i0x010,i$3,i0x409,i,i,i,i,i0,tR1,i0)i.R1
     
        ; Добавляем/обновляем тултип
        SendMessage $TipWnd 1074 0 $R1  ; TTM_ADDTOOLW
        SendMessage $TipWnd 1078 0 $R1  ; TTM_SETTOOLINFOW
        SendMessage $TipWnd 1041 1 $R1  ; TTM_UPDATETIPTEXTW
     
        ; Активируем отображение подсказки
        SendMessage $TipWnd 1025 1 0    ; TTM_ACTIVATE
     
        System::Free $R1
     
        System::Call USER32::LoadCursor(i,i32649)i.s
        System::Call USER32::SetCursor(is)
      ${Else}
        ; Скрываем отображение подсказки
         SendMessage $TipWnd 1025 0 0   ; TTM_DEACTIVATE
      ${EndIf}
    FunctionEnd
     
    ; === Страница ===
    Function nsDialogsPage
      nsDialogs::Create 1018
      Pop $0
     
      ${NSD_CreateLabel} 90u 50u 90u 10u "Форум NSIS на Ru-Board"
      Pop $Link
      SetCtlColors $Link 0x0000FF transparent
      System::Call 'user32::SetClassLong(i$Link,i-12,i0)'
      ${NSD_OnClick} $Link OnClick
     
      ${NSD_CreateTimer} OnTimer 50
      nsDialogs::Show
    FunctionEnd
     
    Function OnClick
      ExecShell "open" "http://forum.ru-board.com/topic.cgi?forum=5&topic=0595&start=0"
    FunctionEnd
     
    Section
    SectionEnd

    Всего записей: 555 | Зарегистр. 30-07-2011 | Отправлено: 00:15 05-11-2025
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bannan
    Спасибо. Я со структурой  TOOLINFO (Unicode) запутался, поэтому ни черта и не получалось...
    Интересны подробности отдельных констант в этой структуре. В чём отличие от ANSI ?

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 09:21 05-11-2025 | Исправлено: MKN, 12:23 07-11-2025
    Bannan



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Интересны подробности отдельных констант в этой структуре. В чём отличие от ANSI.

    В самой структуре TOOLINFO для ANSI/Unicode различий никаких нет.
    Все дело в сообщении TTM_ADDTOOL (ANSI) или TTM_ADDTOOLW (Unicode).
    Аналогично для сообщения TTM_SETTOOLINFO (ANSI) или TTM_SETTOOLINFOW (Unicode).
     
    В плагине и различных примерах в сети используется версия ANSI - TTM_ADDTOOL.
     

    Цитата:
     SendMessage $TipWnd 1041 1 $R1  ; TTM_UPDATETIPTEXTW

    Здесь опечатка. Это сообщение TTM_TRACKACTIVATE.

    Всего записей: 555 | Зарегистр. 30-07-2011 | Отправлено: 21:29 05-11-2025
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bannan

    Цитата:
    В самой структуре TOOLINFO для ANSI/Unicode различий никаких нет.  

    Вообще то есть - в примерах кода в сети... Насколько различия принципиальны, не ясно.
    Например отсюда  
    https://stackoverflow.com/questions/11758105/how-could-i-implement-the-tooltip-effects-in-the-mui-page-components-via-nsis
    структура такая :
    System::Call '*(i40,i${TTF_SUBCLASS},i$3,i0x408,i,i,i,i,i0,tr1)i.r1'
    Как раз с эти кодом у меня и засада...
    Сообщения на W я сразу менял - без результата. Думал дело в структуре...
    Собственно и сейчас ничего не изменилось, не работает в Unicode. Может какие то сообщения надо поменять или добавить ? Или структура для линка отличается от той , что для чекбоксов :
     
    Ну и был ещё код с https://www.cnblogs.com/NSIS/p/16581127.html  
    с структурой :
    System::Call *(i0x28,i0x010,i$3,i0x409,i,i,i,i,i0,tR1)i.R1
    Этот код растиражирован по всей сети.
     
    PS В идеале конечно нужен нормальный плагин, но существующие устаревшие никто не обновляет, а новый писать никто не хочет...
     

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 12:18 06-11-2025 | Исправлено: MKN, 12:21 06-11-2025
    Bannan



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN
     

    Цитата:
    Например отсюда  
    https://stackoverflow.com/questions/11758105/how-could-i-implement-the-tooltip-effects-in-the-mui-page-components-via-nsis

     
    Этот же пример для Unicode: https://pastebin.com/sZiNtGTd
     

    Код:
    Структура TOOLINFOW (из commctrl.h)
    typedef struct {
        UINT      cbSize;          // 4 байта
        UINT      uFlags;          // 4
        HWND      hwnd;          // 4
        UINT_PTR  uId;           // 4
        RECT      rect;             // 16 (left, top, right, bottom)
        HINSTANCE hinst;       // 4
        LPTSTR    lpszText;      // 4 — указатель
        LPARAM    lParam;       // 4
        void      *lpReserved;   // 4 — зарезервировано
    } TOOLINFOW, *LPTOOLINFOW;

     
    Поле cbSize - размер структуры. Суммируем размеры полей = 44 байт (без поля резервирования). Можно указать в десятичном формате (44) или в шестнадцатеричном 0x2С. В примерах для ANSI указано значение 40 (десятичный формат) или 0x28 (шестнадцатеричный формат), что одно и то же.
     
    Поле uFlags - флаги. Используется один флаг TTF_SUBCLASS (в десятичной системе 16; в шестнадцатеричной - 0x010).
     
    Поле hwnd - дескриптор родительского окна. В примерах он определяется как 'FindWindow $3 "#32770" "" $HWNDPARENT'. Соответственно в структуру идет $3.
     
    Поле uId - уникальный идентификатор окна подсказки. Может быть любое число, например, 0x0409.
     
    Поле lpszText - текст подсказки. В примерах подставляется через зарезервированный регистр NSIS.
     
    Все, больше ничего не нужно.
     
    Далее соответственно:
    - добавляем структуру в список подсказок - TTM_ADDTOOLW;
    - обновляем данные подсказки - TTM_SETTOOLINFOW;
    - активируем на экране - TTM_ACTIVATE;
    - активируем отслеживание подсказки - TTM_TRACKACTIVATE.

    Всего записей: 555 | Зарегистр. 30-07-2011 | Отправлено: 21:17 06-11-2025 | Исправлено: Bannan, 21:27 06-11-2025
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bannan
    Теперь доходчиво, спасибо. Почему у меня не сработало, (вроде почти то же самое... ) не ясно...
    Один нюанс - почему то и кириллица и китайский - кракозябрами...  (Windows 11 NSIS 3.11)

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 12:13 07-11-2025 | Исправлено: MKN, 16:01 07-11-2025
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN
     
    Стоит сохранить скрипт в UTF-8 например используя UEStudio/UltraEdit или любой привычный умеющий пересохранять текст в другой кодировке редактор. Этого должно хватить.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 35380 | Зарегистр. 31-07-2002 | Отправлено: 13:21 07-11-2025 | Исправлено: Victor_VG, 13:30 07-11-2025
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG

    Цитата:
    сохранить скрипт в UTF-8

    При : UTF-8 без BOM (в Notepad++) :
     

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 15:01 07-11-2025 | Исправлено: MKN, 15:28 07-11-2025
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN
     
    Попробуй использовать UTF-16 LE. Похоже в GUI ОС что-то сломано и возможно на конкретной машине.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 35380 | Зарегистр. 31-07-2002 | Отправлено: 15:10 07-11-2025
    MKN



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Victor_VG
    Хмм... Преобразовал-сохранил скрипт как ANSI - с кириллицей стало всё в порядке (китайский - знаки вопроса).  ОС - свежеустановленная W11, ничего не должно бы быть сломано...
     
    ps Пардон, изначально было без BOM... Когда просто UTF-8 - с кириллицей всё ок (китайский - знаки вопроса)
    Т.е. скрипту всё равно - ANSI или UTF-8 ?

    Всего записей: 5152 | Зарегистр. 21-04-2005 | Отправлено: 15:21 07-11-2025 | Исправлено: MKN, 15:30 07-11-2025
    Victor_VG



    Tracker Mod
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN
     
    Так для кириллицы коды символов совпадают в обоих таблицах. И шрифты должны иметь поддержку выбранной кодовой страницы иначе они выводят символ-заместитель (обычно "плашки") или случайный мусор.

    ----------
    Жив курилка! (Р. Ролан, "Кола Брюньон")
    Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

    Всего записей: 35380 | Зарегистр. 31-07-2002 | Отправлено: 16:51 07-11-2025
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Программы » Nullsoft Scriptable Install System | NSIS


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2025

    LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

    Рейтинг.ru