|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором 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 | |
|