I'm creating a setup.exe
to my application and I'm using the nsis setup creator and I am compiling on ubuntu.
Now I want customize the setup to appear with background image like this:
How can I put a background in my setup with nsis?
I'm creating a setup.exe
to my application and I'm using the nsis setup creator and I am compiling on ubuntu.
Now I want customize the setup to appear with background image like this:
How can I put a background in my setup with nsis?
A clue would be, editing the required UI executable using Resource hacker and add a picture control on top of it.
You can find the available UI modules inside system path: C:\Program Files\NSIS\Contrib\UIs.
Then once you are done with your editing, define the custom UI using !define MUI_UI in your script and process accordingly.
Your picture is actually this one: http://www.graphical-installer.com/joomla/images/stories/gallery/projects/gallery-4.jpg
So you can use that software - Graphical Installer for NSIS - to achieve exactly the same effect without any effort or programming :)
As author of that software I can say it is really easy to achieve such design:
(the same as hypheni said but with more details)
For more details please refer to the below code snippet
Var hBitmap
!define MUI_CUSTOMFUNCTION_GUIINIT CustomGUIInit
Function CustomGUIInit
InitPluginsDir
ReserveFile `${BMP_HEAD}`
File `/ONAME=$PLUGINSDIR\head.bmp` `${BMP_HEAD}`
GetDlgItem $R1 $HWNDPARENT 1034
System::Call `user32::LoadImage(i 0, t "$PLUGINSDIR\head.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s`
Pop $hBitmap
SendMessage $R1 ${STM_SETIMAGE} ${IMAGE_BITMAP} $hBitmap
FunctionEnd
The above code is calling LoadImage Win32 API function from user32.dll and sets to windows control by SendMessage call.
add yourimage : res.bmp near to script.
!include "MUI2.nsh"
; Local bitmap path.
!define BITMAP_FILE res.bmp
; --------------------------------------------------------------------------------------------------
; Installer Settings
; --------------------------------------------------------------------------------------------------
Name "Background Bitmap"
OutFile "bgbitmap.exe"
ShowInstDetails show
!define MUI_HEADERIMAGE # this is responsible for the big window
;!define MUI_UI_HEADERIMAGE ".\dimm_beta_img.exe" # modded exe
; --------------------------------------------------------------------------------------------------
; Modern UI Settings
; --------------------------------------------------------------------------------------------------
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit
; --------------------------------------------------------------------------------------------------
; Definitions
; --------------------------------------------------------------------------------------------------
Var hBitmap
; --------------------------------------------------------------------------------------------------
; Pages
; --------------------------------------------------------------------------------------------------
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomePageShow
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_LANGUAGE English
; --------------------------------------------------------------------------------------------------
; Macros
; --------------------------------------------------------------------------------------------------
; Destroy a window.
!macro DestroyWindow HWND IDC
GetDlgItem $R0 ${HWND} ${IDC}
System::Call `user32::DestroyWindow(i R0)`
!macroend
; Give window transparent background.
!macro SetTransparent HWND IDC
GetDlgItem $R0 ${HWND} ${IDC}
SetCtlColors $R0 0x444444 transparent
!macroend
; Refresh window.
!macro RefreshWindow HWND IDC
GetDlgItem $R0 ${HWND} ${IDC}
ShowWindow $R0 ${SW_HIDE}
ShowWindow $R0 ${SW_SHOW}
!macroend
; --------------------------------------------------------------------------------------------------
; Functions
; --------------------------------------------------------------------------------------------------
Function MyGUIInit
; Extract bitmap image.
InitPluginsDir
ReserveFile `${BITMAP_FILE}`
File `/ONAME=$PLUGINSDIR\res.bmp` `${BITMAP_FILE}`
; Get the size of the window.
System::Call `*${stRECT} .R0`
System::Call `user32::GetClientRect(i $HWNDPARENT, i R0)`
System::Call `*$R0${stRECT} (, , .R1, .R2)`
System::Free $R0
; Create bitmap control.
System::Call `kernel32::GetModuleHandle(i 0) i.R3`
System::Call `user32::CreateWindowEx(i 0, t "STATIC", t "", i ${SS_BITMAP}|${WS_CHILD}|${WS_VISIBLE}, i 0, i 0, i R1, i R2, i $HWNDPARENT, i ${IDC_BITMAP}, i R3, i 0) i.R1`
System::Call `user32::SetWindowPos(i R1, i ${HWND_TOP}, i 0, i 0, i 0, i 0, i ${SWP_NOSIZE}|${SWP_NOMOVE})`
; Set the bitmap.
System::Call `user32::LoadImage(i 0, t "$PLUGINSDIR\res.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s`
Pop $hBitmap
SendMessage $R1 ${STM_SETIMAGE} ${IMAGE_BITMAP} $hBitmap
; Set transparent backgrounds.
!insertmacro SetTransparent $HWNDPARENT 3
!insertmacro SetTransparent $HWNDPARENT 1
!insertmacro SetTransparent $HWNDPARENT 2
!insertmacro SetTransparent $HWNDPARENT 1034
!insertmacro SetTransparent $HWNDPARENT 1037
!insertmacro SetTransparent $HWNDPARENT 1038
!insertmacro SetTransparent $HWNDPARENT 1028
!insertmacro SetTransparent $HWNDPARENT 1256
; !insertmacro SetTransparent $HWNDPARENT 1045
!insertmacro SetTransparent $HWNDPARENT 1035
; Remove unwanted controls.
!insertmacro DestroyWindow $HWNDPARENT 1256
!insertmacro DestroyWindow $HWNDPARENT 1028
; !insertmacro DestroyWindow $HWNDPARENT 1039
!insertmacro DestroyWindow $HWNDPARENT 1045 # dimm remove line from bottom
; !insertmacro DestroyWindow $HWNDPARENT 1035
; !insertmacro DestroyWindow $HWNDPARENT 1256
FunctionEnd
Function RefreshParentControls
!insertmacro RefreshWindow $HWNDPARENT 1037
!insertmacro RefreshWindow $HWNDPARENT 1038
FunctionEnd
Function WelcomePageShow
# Sets background image
System::Call `user32::LoadImage(i 0, t "$PLUGINSDIR\res.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s`
Pop $hBitmap
; SendMessage $bitmapWindow ${STM_SETIMAGE} ${IMAGE_BITMAP} $hBitmap
# Start solution
SetCtlColors $mui.WelcomePage ${CTRL_COLOUR} transparent
SetCtlColors $mui.WelcomePage.text ${CTRL_COLOUR} transparent
SetCtlColors $mui.WelcomePage.title 0x333333 transparent
!insertmacro DestroyWindow $HWNDPARENT 1037
!insertmacro DestroyWindow $HWNDPARENT 1038
!insertmacro DestroyWindow $HWNDPARENT 1036
SetCtlColors $0 222425 transparent
System::Call `user32::DestroyWindow(i $mui.WelcomePage.Image)`
Call RefreshParentControls
FunctionEnd
; BrandingText ""
; Free loaded resources.
Function .onGUIEnd
; Destroy the bitmap.
System::Call `gdi32::DeleteObject(i s)` $hBitmap
FunctionEnd
; --------------------------------------------------------------------------------------------------
; Dummy section
; --------------------------------------------------------------------------------------------------
Section "Dummy Section"
SectionEnd