SkinnedControls plug-in

From NSIS Wiki

Download Link

Zip.gif (236 KB) Exe.gif SkinnedControls1.4.exe (512 KB)

SkinnedControls Forum Thread


This NSIS plug-in allows to skin all buttons and scroll bars of your installer and allows to select text colors on buttons even those on custom pages.

It was developed with an aim of integrate it in UltraModernUI, an new user interface with a style like the most recent installers for NSIS. (

I am using this plugin for creating cool-looking Graphical Installers: (see image below) so I fixed some bugs in this plug-in.


Two versions of the plugin are available: an ANSI and an UNICODE.

How To Use

See example and documentation in Examples\SkinnedControls\ from package

SkinnedControls::skinit Function

Skins the installer's buttons and scrollbars with selected bitmaps and sets colors for texts on buttons.


; Skin the button
Function .onInit
  ; Extract bitmaps for buttons
  File "/oname=$PLUGINSDIR\button.bmp" "${NSISDIR}\Contrib\SkinnedControls\skins\defaultbtn.bmp"
  File "/oname=$PLUGINSDIR\scrollbar.bmp" "${NSISDIR}\Contrib\SkinnedControls\skins\defaultsb.bmp"
Function myGUIInit
  ; start the plugin
  ; the /disabledtextcolor, /selectedtextcolor and /textcolor parameters are optionnal
  SkinnedControls::skinit /NOUNLOAD \
			/disabledtextcolor=808080 \
			/selectedtextcolor=000080 \
			/textcolor=000000 \
			"/scrollbar=$PLUGINSDIR\scrollbar.bmp" \


Force the method to return "success" on the stack or an error string if there was an error.

This parameter must be set first.

Scrollbar image (se below).
Button image (se below).
Color of text when button is disabled (Format is in hex: RRGGBB as CSS colors).
Color of text when button is being clicked (Format is in hex: RRGGBB as CSS colors).
Color for normal state of button (Format is in hex: RRGGBB as CSS colors).

One of /scrollbar and /button parameter is required, other is optionnal.

If /SetReturn is set, the method returns "success" on the stack or an error string if there was an error. Else, error message boxes displayed automatically.

Parameter names are now ignore case.

SkinnedControls::setskin DLL Function

Modifiy parameter. Use the same parameters as skinit

SkinnedControls::unskinit DLL Function

Releases the plug-in resources (usually called in the (un).onGUIEnd function). This method is now optional thanks to the new NSIS plug-in API.


Function .onGUIEnd
  ; stop the plugin


  • During the installation, the "Show Detail" button is unskinned:

You can insert this instruction on your script to workaround this bug, for classic UI:

ChangeUI IDD_INSTFILES "${NSISDIR}\Contrib\UIs\default_sb.exe"

for ModernUI:

ChangeUI IDD_INSTFILES "${NSISDIR}\Contrib\UIs\modern_sb.exe"
  • When using the previous workaround the "Show Detail" button is invisible:

Modern UI set the XPStyle instruction to On automatically. XPStyle must be set to Off with the previous workaround otherwise the "Show Detail" button will disappear:

XPStyle Off
  • When you use MessageBox function on some page (or some other pop-up windows like Banner plug-in), the some page buttons and scrollbars got unskinned:


You can use this tricky workaround to fix this:

MessageBox MB_OK "This message causes SkinnedControls bug..." 
; After clicking OK the buttons lost their skin
SendMessage $HWNDPARENT ${WM_MENUDRAG} 0 0 ; Do this to force reskin
;If you use UMUI or MUIEx interfaces, you can simply insert macro:

We used WM_MENUDRAG message (which is normally unused) to notify window to put another refresh message into queue -> to force redrawing. See the source code how it works.

  • The plug-in does not work on Windows 95:

Plug-ins compiled with Visual Studio 2008 is not executed... Microsoft says: "Beginning with Visual C++ 2008, Visual C++ does not support targeting Windows 95, Windows 98, Windows ME, or Windows NT [4]."

  • Scrollbars are not skinned on Windows 9x/Me:

The Cool Scrollbar Library, that the plug-in use, work only on Windows NT kernel.


Help wanted for improve this plug-in:

  • Find better ways to fix buttons which unskin to avoid crappy workaround.
  • Support transparency for buttons.
  • Ability to skin checkboxes and radio buttons (transparency background required).
  • Ability to skin dropdown scroll bars and arrow down button.
  • Ability to skin MessageBox buttons and text and background colors.

Versions History

1.4 (December 25, 2016)
  • Migrate to the new NSIS plug-in API;
  • The unskinit function in now optional thanks to the new NSIS plug-in API;
  • Parameter names are now ignore case.
1.3 (August 27, 2016)
  • Button image size are no more limited to allow smoother gradients (see above);
  • "success" or error messages is no longer pushed in the stack by skinit and setskin methods unless the new /SetReturn parameter is set;
  • Fix License text and other RichText scrollbars was not skinned in Unicode Build;
  • Code cleanup;
  • Rewritten documentation.
1.2 (2011)
  • Fixed unskinning buttons after MessageBox is shown (see above)
  • Project was converted to Visual Studio 2008 format
1.1 (2010)
  • Littles bug fixes & Unicode build
1.0 (2009)
  • First public release.
  • Replace the former SkinnedButton plug-in.


Based on [ wansis], a Plug-in written by Saivert that skins NSIS like Winamp

and use the wa_dlg.h courtesy of Nullsoft, Inc.

as well as the Cool Scrollbar Library Copyright (c) J Brown 2001.

  • Version 1.0, 1.3, 1.4, written by SuperPat
Personal tools