Change caption of installer at runtime

From NSIS Wiki
Jump to navigationJump to search
Author: bholliger (talk, contrib)


Description

This sample describes how to change the window title of the installer at runtime. It is based on this Forum-Thread. Thx rsegal.

The main code is

  SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:Your text"

This can be abstracted as a Macro through:

  !include "WinMessages.nsh"
  !define SetTitleBar "!insertmacro SetTitleBar"
  !macro SetTitlebar Str
    SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:${Str}"
  !macroend

Have a look at the following sample.

Sample

Outfile 'test.exe'
InstallDir '$PROGRAMFILES\Test'
 
!include WinMessages.nsh
 
!define SetTitleBar "!insertmacro SetTitleBar"
!macro SetTitlebar Str
  SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:${Str}"
!macroend
 
Caption "My Installer"
 
page components
page directory
page instfiles
 
Section "Section 1"
  SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:We are waiting... [Section 1]"
  Sleep 5000
  SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:Ok, that's enough."
SectionEnd
 
Section "Section 2"
  ${SetTitleBar} "We are waiting... [Section 2]"
  Sleep 5000
  ${SetTitleBar} "Ok, that's enough."
SectionEnd
 
Function .onSelChange
  IntOp $1 $1 + 1
  ${SetTitleBar} "Changed sections $1 times"
FunctionEnd
 
Function .onInit
  StrCpy $1 "0"
FunctionEnd

Please note that you have to call this function in every page's opening (or pre) function, as otherwise the titlebar will be reset to the default set by Caption commands.

Additionally, the above function will only change the titlebar of the main installer window. Any messageboxes, error dialogs, etc. that may present themselves during installation will use the title set by Caption commands.