如何使用NSIS将焦点设置为许可协议复选框控件

时间:2019-01-26 13:39:54

标签: nsis

我想使用NSIS将“许可焦点”默认设置为“许可协议”页面中的“许可协议”复选框。然后Tabtab应该可以工作。

请帮助我如何设置焦点?

下面是我的代码段:

!include LogicLib.nsh

  !define MUI_TEXT_WELCOME_INFO_TITLE $(welcometitle)
  !define MUI_TEXT_WELCOME_INFO_TEXT $(welcometext)

  !insertmacro MUI_PAGE_WELCOME

  !define MUI_LICENSEPAGE_CHECKBOX ""
  !define MUI_INNERTEXT_LICENSE_BOTTOM ""
  !define MUI_INNERTEXT_LICENSE_TOP ""
  !define MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX ""

  !define MUI_TEXT_LICENSE_TITLE $(licensetitle)
  !define MUI_TEXT_LICENSE_SUBTITLE $(licensesubtitle)
  !define MUI_LICENSEPAGE_CHECKBOX_TEXT $(licensecheckboxtext)

  !insertmacro MUI_PAGE_LICENSE "C:\Program Files (x86)\NSIS\Docs\Modern UI 2\license.txt"

 !define MUI_DIRECTORYPAGE_TEXT_TOP $(mydirtoptext)
 !define MUI_TEXT_DIRECTORY_TITLE $(mydirtitle)
 !define MUI_TEXT_DIRECTORY_SUBTITLE $(mydirsubtitle)

  !insertmacro MUI_PAGE_DIRECTORY

  !insertmacro MUI_PAGE_INSTFILES

  !define MUI_TEXT_FINISH_INFO_TITLE $(Finishpagetitle)
  !define MUI_TEXT_FINISH_INFO_TEXT $(Finishpagesubtitle)

  !define MUI_FINISHPAGE_RUN ""
  !define MUI_FINISHPAGE_RUN_TEXT $(FinishonlineReg)

  !insertmacro MUI_PAGE_FINISH

  !insertmacro MUI_UNPAGE_INSTFILES

 ;--------------------------------
  !insertmacro MUI_LANGUAGE "English" 

; The stuff to install
Section "My TestApp (required)"
SectionEnd

1 个答案:

答案 0 :(得分:1)

Windows UI guidelines说:

  

对于键盘导航,选项卡顺序应按逻辑顺序(通常从左到右,从上到下)流动。

但是如果您认为必须强制,则可以执行以下操作:

!include WinMessages.nsh
!include MUI2.nsh

!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_CHECKBOX ""
!define MUI_PAGE_CUSTOMFUNCTION_SHOW myForceLicenseFocus
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Function myForceLicenseFocus
!if ${MUI_SYSVERSION} >= 2.0
    FindWindow $0 "BUTTON" "" $mui.LicensePage
!else
    FindWindow $0 "#32770" "" $hWndParent
    FindWindow $0 "BUTTON" "" $0
!endif
System::Call 'USER32::SetFocus(pr0)'
!define /ifndef WM_CHANGEUISTATE 0x127
System::Call 'USER32::PostMessage(pr0,i${WM_CHANGEUISTATE},p0x30002,p0)' ; This forces the checkbox to display the focus rectangle
System::Call 'USER32::SetWindowPos(pr0,p0,i,i,i,i,i0x13)' ; Change tab order
FunctionEnd