Search code examples
winapiinstallationnsis

Add a window to an existing MUI Page


Is it possible to add a window(a Label) to an existing MUI page; like the installer page, welcome page?

I would like to add a new label to the installer page. My code below adds a new Static window to the window but its never shown/sits above other windows. I know the window exists because I can see it using WinSpy++ but it sits behind another window. Also the new window has a funny style "Style: 50000000 (hidden, enabled)" whilst other normal static windows have the style "Style: 5000008C (visible, enabled)".

How can I get my label(Static Window) to show?

!include nsdialogs.nsh
!include MUI2.nsh

!define MUI_PAGE_CUSTOMFUNCTION_SHOW instshow

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

OutFile "test.exe"

Function instshow
    FindWindow $0 "#32770" "" $HWNDPARENT
    GetDlgItem $2 $0 1016
    System::Call 'USER32::CreateWindowEx(i0,t "STATIC",t "Some option",i ${WS_CHILD}|${WS_VISIBLE},i100,i100,i100,i20,i$2,i666,i0,i0) $R2'
    System::Call `user32::SetWindowPos(i $R2, i ${HWND_TOP}, i 0, i 0, i 0, i 0, i ${SWP_NOSIZE}|${SWP_NOMOVE})` # attempt to push new label to front

    # Attempt to refresh new labels parent window
    GetDlgItem $R0 $HWNDPARENT 1016
    ShowWindow $R0 ${SW_HIDE}
    ShowWindow $R0 ${SW_SHOW}
    # Attempt to refresh new label 
    ShowWindow $R2 ${SW_HIDE}
    ShowWindow $R2 ${SW_SHOW}
FunctionEnd


Section "Dummy"

SectionEnd

Solution

  • Ok heres how to do it. Thanks for the advice Anders

    !include nsdialogs.nsh
    !include MUI2.nsh
    
    !define MUI_PAGE_CUSTOMFUNCTION_SHOW instshow
    
    !insertmacro MUI_PAGE_INSTFILES
    !insertmacro MUI_LANGUAGE "English"
    
    OutFile "test.exe"
    
    Function instshow
        FindWindow $0 "#32770" "" $HWNDPARENT
        System::Call 'USER32::CreateWindowEx(i0,t "STATIC",t "Some text",i ${WS_CHILD}|${WS_VISIBLE},i100,i100,i100,i20,i $0,i222,i0,i0) $R2'
    
        GetDlgItem $1 $0 1027
        GetDlgItem $2 $0 222
        SendMessage $1 ${WM_GETFONT} 0 0 $3
        SendMessage $2 ${WM_SETFONT} $3 1
    FunctionEnd
    
    
    Section "Dummy"
    
    SectionEnd