Страница справочника NSIS без изменяемого поля - PullRequest
0 голосов
/ 19 апреля 2020

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

enter image description here

Я делаю в каталоге. n sh EnableWindow для полей:

    ;Get control handles
    FindWindow $mui.DirectoryPage "#32770" "" $HWNDPARENT
    GetDlgItem $mui.DirectoryPage.Text $mui.DirectoryPage 1006
    GetDlgItem $mui.DirectoryPage.DirectoryBox $mui.DirectoryPage 1020
    GetDlgItem $mui.DirectoryPage.Directory $mui.DirectoryPage 1019
    GetDlgItem $mui.DirectoryPage.BrowseButton $mui.DirectoryPage 1001
    GetDlgItem $mui.DirectoryPage.SpaceRequired $mui.DirectoryPage 1023
    GetDlgItem $mui.DirectoryPage.SpaceAvailable $mui.DirectoryPage 1024
    EnableWindow $mui.DirectoryPage.Directory 0
    EnableWindow $mui.DirectoryPage.BrowseButton 0

Теперь поля серые и заблокированы:

enter image description here

Но это не так что я хочу:

  • кнопка должна исчезнуть

  • Поле каталога должно быть больше и иметь нормальную яркость, то есть нормальное поле

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

это моя пользовательская страница с указанием пути установки

enter image description here

0 голосов
/ 19 апреля 2020

Как указано в комментариях, это плохая идея. Пользователь также может установить другой $InstDir с помощью /D в командной строке.

Вы можете сделать поле редактирования доступным только для чтения, а не отключать его, таким образом, пользователь может по крайней мере выбрать / скопировать текст. Элемент управления может оставаться серым, это зависит от активного Windows визуального стиля / темы.

Вы можете использовать MUI_UI и файл пользовательского интерфейса или изменить размер элемента управления во время выполнения:

InstallDir "$Temp\Whatever"
!include WinMessages.nsh
!include MUI2.nsh
!define MUI_PAGE_CUSTOMFUNCTION_SHOW LockDirPage
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Function LockDirPage
EnableWindow $mui.DirectoryPage.BrowseButton 0
ShowWindow $mui.DirectoryPage.BrowseButton 0
SendMessage $mui.DirectoryPage.Directory ${EM_SETREADONLY} 1 ""
System::Call 'USER32::GetWindowRect(p$mui.DirectoryPage.Directory,@r1)'
System::Call 'USER32::GetWindowRect(p$mui.DirectoryPage.BrowseButton,@r2)'
System::Call *$2(i,i,i.r2)
System::Call *$1(i.r3,i.r4,i,i.r6)
IntOp $3 $2 - $3 ; Width
IntOp $4 $6 - $4 ; Height
System::Call 'USER32::SetWindowPos(p$mui.DirectoryPage.Directory,p0,i0,i0,ir3,ir4,i0x16)'
FunctionEnd
...