|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать AlekseyPopovv,
В первом случае сложностей не вижу Во втором случае вижу пару особенностей в виде необходимости получения SID и преобразования буквы диска в имя устройства Для получения SID текущено пользователя можно применить макрос GetCurrentUserSID GetCurrentUserSID
!define GetCurrentUserSID `!insertmacro GetCurrentUserSID ` !macro GetCurrentUserSID out_SID Push $0 ; fn ret / out_SID Push $1 ; SID struct Push $2 ; tmp System::Call "advapi32::GetUserName(t.s, *i${NSIS_MAX_STRLEN}) i.r0" StrCmp $0 0 +5 System::Call 'advapi32::LookupAccountName(i0, ts, @r1, *i${NSIS_MAX_STRLEN}, t .r2, *i ${NSIS_MAX_STRLEN}, *i .r2 ) i.r0' StrCmp $0 0 +3 System::Call 'advapi32::ConvertSidToStringSid(pr1, *t.r0 )' Goto +2 StrCpy $0 '' Pop $2 Pop $1 Exch $0 Pop ${out_SID} !macroend Если надо пройтись по всем пользователям, то можно использовать макрос Для преобразования пути в простейшем случае (c:\path -> \Device\HarddiskVolume3\path) можно использовать такой макрос: Скрытый текст
!define GetPathWithDeviceName `!insertmacro GetPathWithDeviceName ` !macro GetPathWithDeviceName out_DevPath in_DOSPath Push '${in_DOSPath}' Exch $0 Push $1 Push $2 StrLen $1 $0 StrCmp $1 1 0 +3 StrCpy $1 $0: Goto +2 StrCpy $1 $0 2 System::Call 'kernel32::QueryDosDevice(tr1, t.r2, i${NSIS_MAX_STRLEN} ) i.r3' StrCmp $3 0 0 +3 StrCpy $0 '' Goto +3 StrCpy $0 $0 '' 2 StrCpy $0 $2$0 Pop $2 Pop $1 Exch $0 Pop ${out_DevPath} !macroend |
Последний раз редактировалось iglezz, 01-06-2023 в 18:52. Отправлено: 18:41, 01-06-2023 | #2731 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Как покрасить эти места в белый?
Function MyGUIInit System::Call "user32::GetWindowLong(i$HWNDPARENT,i-20)i.s" System::Int64Op "0x80000" | System::Call "user32::SetWindowLong(i$HWNDPARENT,i-20,is)" System::Call "user32::SetLayeredWindowAttributes(i$HWNDPARENT,i,i243,i0x00000002)" GetDlgItem $R0 $HWNDPARENT 1034 GetDlgItem $R1 $HWNDPARENT 1037 GetDlgItem $R2 $HWNDPARENT 1038 SetCtlColors $R0 000000 FFFFFF SetCtlColors $R1 000000 FFFFFF SetCtlColors $R2 000000 FFFFFF FunctionEnd |
Последний раз редактировалось AlekseyPopovv, 02-06-2023 в 19:20. Отправлено: 18:36, 02-06-2023 | #2732 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Кроме замены цвета фона окна (в .onGUIInit) надо ещё поменять цвет фона каждой страницы и всех элементов в ней (в show-функции для каждой страницы)
пример
!include WinMessages.nsh RequestExecutionLevel user InstallDir $TEMP Page components "" cshow Page directory "" dshow Page instfiles "" ishow ; define background color !define BACKGROUNDCOLOR 0xFFFFFF Section `Dummy Section` DetailPrint ... SectionEnd Function cshow ; repaint page FindWindow $1 "#32770" "" $HWNDPARENT SetCtlColors $1 '' ${BACKGROUNDCOLOR} ; repaint page controls GetDlgItem $0 $1 1031 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1006 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1017 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1021 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1022 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1023 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1032 SetCtlColors $0 '' ${BACKGROUNDCOLOR} FunctionEnd Function dshow ; repaint page FindWindow $1 "#32770" "" $HWNDPARENT SetCtlColors $1 '' ${BACKGROUNDCOLOR} ; repaint page controls GetDlgItem $0 $1 1031 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1006 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1019 SetCtlColors $0 '' ${BACKGROUNDCOLOR} ; ... FunctionEnd Function ishow ; repaint page FindWindow $1 "#32770" "" $HWNDPARENT SetCtlColors $1 '' ${BACKGROUNDCOLOR} ; repaint page controls GetDlgItem $0 $1 1031 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1006 SetCtlColors $0 '' ${BACKGROUNDCOLOR} FunctionEnd Function .onGUIInit ; repaint window SetCtlColors $HWNDPARENT '' ${BACKGROUNDCOLOR} ; set BrandingText ${BACKGROUNDCOLOR} background GetDlgItem $0 $HWNDPARENT 1028 SetCtlColors $0 '' transparent FunctionEnd |
Последний раз редактировалось iglezz, 02-06-2023 в 21:28. Причина: transparent --> ${BACKGROUNDCOLOR} Отправлено: 20:59, 02-06-2023 | #2733 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Фон также можно задавать для каждой отдельной страницы
пример
!include WinMessages.nsh RequestExecutionLevel user InstallDir $TEMP Page components "" cshow Page directory "" dshow Page instfiles "" ishow !define /ifndef RDW_INVALIDATE 0x0001 !define /ifndef RDW_ERASE 0x0004 ; define background color !define BACKGROUNDCOLOR 0xFFFFFF Section `Dummy Section` DetailPrint ... SectionEnd Function cshow ; repaint window SetCtlColors $HWNDPARENT '' ${BACKGROUNDCOLOR} ; repaint page FindWindow $1 "#32770" "" $HWNDPARENT SetCtlColors $1 '' ${BACKGROUNDCOLOR} ; repaint page controls GetDlgItem $0 $1 1031 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1006 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1017 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1021 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1022 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1023 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1032 SetCtlColors $0 '' ${BACKGROUNDCOLOR} System::Call "user32::RedrawWindow(i,i,i,i)i ($HWNDPARENT, 0, 0,${RDW_INVALIDATE}|${RDW_ERASE})" FunctionEnd Function dshow ; redefine page background !define /redef BACKGROUNDCOLOR 0x88ff88 ; repaint window SetCtlColors $HWNDPARENT '' ${BACKGROUNDCOLOR} ; repaint page FindWindow $1 "#32770" "" $HWNDPARENT SetCtlColors $1 '' ${BACKGROUNDCOLOR} ; repaint page controls GetDlgItem $0 $1 1031 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1006 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1019 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1020 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1023 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1024 SetCtlColors $0 '' ${BACKGROUNDCOLOR} System::Call "user32::RedrawWindow(i,i,i,i)i ($HWNDPARENT, 0, 0,${RDW_INVALIDATE}|${RDW_ERASE})" FunctionEnd Function ishow ; redefine page background !define /redef BACKGROUNDCOLOR 0xabcdef ; repaint window SetCtlColors $HWNDPARENT '' ${BACKGROUNDCOLOR} ; repaint page FindWindow $1 "#32770" "" $HWNDPARENT SetCtlColors $1 '' ${BACKGROUNDCOLOR} ; repaint page controls GetDlgItem $0 $1 1031 SetCtlColors $0 '' ${BACKGROUNDCOLOR} GetDlgItem $0 $1 1006 SetCtlColors $0 '' ${BACKGROUNDCOLOR} System::Call "user32::RedrawWindow(i,i,i,i)i ($HWNDPARENT, 0, 0,${RDW_INVALIDATE}|${RDW_ERASE})" FunctionEnd Function .onGUIInit ; set BrandingText${BACKGROUNDCOLOR} background GetDlgItem $0 $HWNDPARENT 1028 SetCtlColors $0 '' transparent FunctionEnd |
Отправлено: 21:31, 02-06-2023 | #2734 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Как переименовать кнопку отмена на кастомной странице ReadmePage?
|
Отправлено: 16:20, 03-06-2023 | #2735 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:33, 03-06-2023 | #2736 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Есть у кого ни будь пример кастомной страницы MUI_PAGE_INSTFILES?
|
Отправлено: 11:41, 04-06-2023 | #2737 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Как убрать кнопку закрыть и сделать кнопку отмена активной?
|
Отправлено: 16:43, 04-06-2023 | #2738 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Цитата AlekseyPopovv:
Отмену активной сделать мало, там ещё много чего написать надо для обработки этой отмены - InstFiles Cancel - Allowing a user to cancel installation during InstFiles |
|
Отправлено: 00:45, 05-06-2023 | #2739 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать iglezz, как поменять шрифт над прогресс баром?
|
Отправлено: 16:38, 06-06-2023 | #2740 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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 |
|