-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | DSL for producing Windows Installer using NSIS. -- -- NSIS (Nullsoft Scriptable Install System, -- http://nsis.sourceforge.net/) is a tool that allows programmers -- to create installers for Windows. This library provides an alternative -- syntax for NSIS scripts, as an embedded Haskell language, removing -- much of the hard work in developing an install script. Simple NSIS -- installers should look mostly the same, complex ones should be -- significantly more maintainable. @package nsis @version 0.3.2 -- | List of common Windows Messages -- -- 2005 Shengalts Aleksander aka Instructor Shengalts@mail.ru -- -- For usage example see Examples/WinMessages.hs. -- --
-- Prefix Message category -- ------------------------- -- SW ShowWindow Commands -- BM Button control -- CB Combo box control -- EM Edit control -- LB List box control -- WM General window -- ABM Application desktop toolbar -- DBT Device -- DM Default push button control -- HDM Header control -- LVM List view control -- SB Status bar window -- SBM Scroll bar control -- STM Static control -- TCM Tab control -- PBM Progress bar ---- --
-- NOT included messages (WM_USER + X) -- ----------------------------------- -- CBEM Extended combo box control -- CDM Common dialog box -- DL Drag list box -- DTM Date and time picker control -- HKM Hot key control -- IPM IP address control -- MCM Month calendar control -- PGM Pager control -- PSM Property sheet -- RB Rebar control -- TB Toolbar -- TBM Trackbar -- TTM Tooltip control -- TVM Tree-view control -- UDM Up-down control --module Development.NSIS.Plugins.WinMessages hwnd_BROADCAST :: Num t => t sw_HIDE :: Num t => t sw_SHOWNORMAL :: Num t => t sw_NORMAL :: Num t => t sw_SHOWMINIMIZED :: Num t => t sw_SHOWMAXIMIZED :: Num t => t sw_MAXIMIZE :: Num t => t sw_SHOWNOACTIVATE :: Num t => t sw_SHOW :: Num t => t sw_MINIMIZE :: Num t => t sw_SHOWMINNOACTIVE :: Num t => t sw_SHOWNA :: Num t => t sw_RESTORE :: Num t => t sw_SHOWDEFAULT :: Num t => t sw_FORCEMINIMIZE :: Num t => t sw_MAX :: Num t => t bm_CLICK :: Num t => t bm_GETCHECK :: Num t => t bm_GETIMAGE :: Num t => t bm_GETSTATE :: Num t => t bm_SETCHECK :: Num t => t bm_SETIMAGE :: Num t => t bm_SETSTATE :: Num t => t bm_SETSTYLE :: Num t => t bst_UNCHECKED :: Num t => t bst_CHECKED :: Num t => t bst_INDETERMINATE :: Num t => t bst_PUSHED :: Num t => t bst_FOCUS :: Num t => t cb_ADDSTRING :: Num t => t cb_DELETESTRING :: Num t => t cb_DIR :: Num t => t cb_FINDSTRING :: Num t => t cb_FINDSTRINGEXACT :: Num t => t cb_GETCOUNT :: Num t => t cb_GETCURSEL :: Num t => t cb_GETDROPPEDCONTROLRECT :: Num t => t cb_GETDROPPEDSTATE :: Num t => t cb_GETDROPPEDWIDTH :: Num t => t cb_GETEDITSEL :: Num t => t cb_GETEXTENDEDUI :: Num t => t cb_GETHORIZONTALEXTENT :: Num t => t cb_GETITEMDATA :: Num t => t cb_GETITEMHEIGHT :: Num t => t cb_GETLBTEXT :: Num t => t cb_GETLBTEXTLEN :: Num t => t cb_GETLOCALE :: Num t => t cb_GETTOPINDEX :: Num t => t cb_INITSTORAGE :: Num t => t cb_INSERTSTRING :: Num t => t cb_LIMITTEXT :: Num t => t cb_MSGMAX :: Num t => t cb_MULTIPLEADDSTRING :: Num t => t cb_RESETCONTENT :: Num t => t cb_SELECTSTRING :: Num t => t cb_SETCURSEL :: Num t => t cb_SETDROPPEDWIDTH :: Num t => t cb_SETEDITSEL :: Num t => t cb_SETEXTENDEDUI :: Num t => t cb_SETHORIZONTALEXTENT :: Num t => t cb_SETITEMDATA :: Num t => t cb_SETITEMHEIGHT :: Num t => t cb_SETLOCALE :: Num t => t cb_SETTOPINDEX :: Num t => t cb_SHOWDROPDOWN :: Num t => t cb_ERR :: Num a => a em_CANUNDO :: Num t => t em_CHARFROMPOS :: Num t => t em_EMPTYUNDOBUFFER :: Num t => t em_EXLIMITTEXT :: Num t => t em_FMTLINES :: Num t => t em_GETFIRSTVISIBLELINE :: Num t => t em_GETHANDLE :: Num t => t em_GETIMESTATUS :: Num t => t em_GETLIMITTEXT :: Num t => t em_GETLINE :: Num t => t em_GETLINECOUNT :: Num t => t em_GETMARGINS :: Num t => t em_GETMODIFY :: Num t => t em_GETPASSWORDCHAR :: Num t => t em_GETRECT :: Num t => t em_GETSEL :: Num t => t em_GETTHUMB :: Num t => t em_GETWORDBREAKPROC :: Num t => t em_LIMITTEXT :: Num t => t em_LINEFROMCHAR :: Num t => t em_LINEINDEX :: Num t => t em_LINELENGTH :: Num t => t em_LINESCROLL :: Num t => t em_POSFROMCHAR :: Num t => t em_REPLACESEL :: Num t => t em_SCROLL :: Num t => t em_SCROLLCARET :: Num t => t em_SETHANDLE :: Num t => t em_SETIMESTATUS :: Num t => t em_SETLIMITTEXT :: Num t => t em_SETMARGINS :: Num t => t em_SETMODIFY :: Num t => t em_SETPASSWORDCHAR :: Num t => t em_SETREADONLY :: Num t => t em_SETRECT :: Num t => t em_SETRECTNP :: Num t => t em_SETSEL :: Num t => t em_SETTABSTOPS :: Num t => t em_SETWORDBREAKPROC :: Num t => t em_UNDO :: Num t => t lb_ADDFILE :: Num t => t lb_ADDSTRING :: Num t => t lb_DELETESTRING :: Num t => t lb_DIR :: Num t => t lb_FINDSTRING :: Num t => t lb_FINDSTRINGEXACT :: Num t => t lb_GETANCHORINDEX :: Num t => t lb_GETCARETINDEX :: Num t => t lb_GETCOUNT :: Num t => t lb_GETCURSEL :: Num t => t lb_GETHORIZONTALEXTENT :: Num t => t lb_GETITEMDATA :: Num t => t lb_GETITEMHEIGHT :: Num t => t lb_GETITEMRECT :: Num t => t lb_GETLOCALE :: Num t => t lb_GETSEL :: Num t => t lb_GETSELCOUNT :: Num t => t lb_GETSELITEMS :: Num t => t lb_GETTEXT :: Num t => t lb_GETTEXTLEN :: Num t => t lb_GETTOPINDEX :: Num t => t lb_INITSTORAGE :: Num t => t lb_INSERTSTRING :: Num t => t lb_ITEMFROMPOINT :: Num t => t lb_MSGMAX :: Num t => t lb_MULTIPLEADDSTRING :: Num t => t lb_RESETCONTENT :: Num t => t lb_SELECTSTRING :: Num t => t lb_SELITEMRANGE :: Num t => t lb_SELITEMRANGEEX :: Num t => t lb_SETANCHORINDEX :: Num t => t lb_SETCARETINDEX :: Num t => t lb_SETCOLUMNWIDTH :: Num t => t lb_SETCOUNT :: Num t => t lb_SETCURSEL :: Num t => t lb_SETHORIZONTALEXTENT :: Num t => t lb_SETITEMDATA :: Num t => t lb_SETITEMHEIGHT :: Num t => t lb_SETLOCALE :: Num t => t lb_SETSEL :: Num t => t lb_SETTABSTOPS :: Num t => t lb_SETTOPINDEX :: Num t => t lb_ERR :: Num a => a wm_ACTIVATE :: Num t => t wm_ACTIVATEAPP :: Num t => t wm_AFXFIRST :: Num t => t wm_AFXLAST :: Num t => t wm_APP :: Num t => t wm_APPCOMMAND :: Num t => t wm_ASKCBFORMATNAME :: Num t => t wm_CANCELJOURNAL :: Num t => t wm_CANCELMODE :: Num t => t wm_CAPTURECHANGED :: Num t => t wm_CHANGECBCHAIN :: Num t => t wm_CHANGEUISTATE :: Num t => t wm_CHAR :: Num t => t wm_CHARTOITEM :: Num t => t wm_CHILDACTIVATE :: Num t => t wm_CLEAR :: Num t => t wm_CLOSE :: Num t => t wm_COMMAND :: Num t => t wm_COMMNOTIFY :: Num t => t wm_COMPACTING :: Num t => t wm_COMPAREITEM :: Num t => t wm_CONTEXTMENU :: Num t => t wm_CONVERTREQUESTEX :: Num t => t wm_COPY :: Num t => t wm_COPYDATA :: Num t => t wm_CREATE :: Num t => t wm_CTLCOLOR :: Num t => t wm_CTLCOLORBTN :: Num t => t wm_CTLCOLORDLG :: Num t => t wm_CTLCOLOREDIT :: Num t => t wm_CTLCOLORLISTBOX :: Num t => t wm_CTLCOLORMSGBOX :: Num t => t wm_CTLCOLORSCROLLBAR :: Num t => t wm_CTLCOLORSTATIC :: Num t => t wm_CUT :: Num t => t wm_DDE_FIRST :: Num t => t wm_DEADCHAR :: Num t => t wm_DELETEITEM :: Num t => t wm_DESTROY :: Num t => t wm_DESTROYCLIPBOARD :: Num t => t wm_DEVICECHANGE :: Num t => t wm_DEVMODECHANGE :: Num t => t wm_DISPLAYCHANGE :: Num t => t wm_DRAWCLIPBOARD :: Num t => t wm_DRAWITEM :: Num t => t wm_DROPFILES :: Num t => t wm_ENABLE :: Num t => t wm_ENDSESSION :: Num t => t wm_ENTERIDLE :: Num t => t wm_ENTERMENULOOP :: Num t => t wm_ENTERSIZEMOVE :: Num t => t wm_ERASEBKGND :: Num t => t wm_EXITMENULOOP :: Num t => t wm_EXITSIZEMOVE :: Num t => t wm_FONTCHANGE :: Num t => t wm_GETDLGCODE :: Num t => t wm_GETFONT :: Num t => t wm_GETHOTKEY :: Num t => t wm_GETICON :: Num t => t wm_GETMINMAXINFO :: Num t => t wm_GETOBJECT :: Num t => t wm_GETTEXT :: Num t => t wm_GETTEXTLENGTH :: Num t => t wm_HANDHELDFIRST :: Num t => t wm_HANDHELDLAST :: Num t => t wm_HELP :: Num t => t wm_HOTKEY :: Num t => t wm_HSCROLL :: Num t => t wm_HSCROLLCLIPBOARD :: Num t => t wm_ICONERASEBKGND :: Num t => t wm_IME_CHAR :: Num t => t wm_IME_COMPOSITION :: Num t => t wm_IME_COMPOSITIONFULL :: Num t => t wm_IME_CONTROL :: Num t => t wm_IME_ENDCOMPOSITION :: Num t => t wm_IME_KEYDOWN :: Num t => t wm_IME_KEYLAST :: Num t => t wm_IME_KEYUP :: Num t => t wm_IME_NOTIFY :: Num t => t wm_IME_REQUEST :: Num t => t wm_IME_SELECT :: Num t => t wm_IME_SETCONTEXT :: Num t => t wm_IME_STARTCOMPOSITION :: Num t => t wm_INITDIALOG :: Num t => t wm_INITMENU :: Num t => t wm_INITMENUPOPUP :: Num t => t wm_INPUT :: Num t => t wm_INPUTLANGCHANGE :: Num t => t wm_INPUTLANGCHANGEREQUEST :: Num t => t wm_KEYDOWN :: Num t => t wm_KEYFIRST :: Num t => t wm_KEYLAST :: Num t => t wm_KEYUP :: Num t => t wm_KILLFOCUS :: Num t => t wm_LBUTTONDBLCLK :: Num t => t wm_LBUTTONDOWN :: Num t => t wm_LBUTTONUP :: Num t => t wm_MBUTTONDBLCLK :: Num t => t wm_MBUTTONDOWN :: Num t => t wm_MBUTTONUP :: Num t => t wm_MDIACTIVATE :: Num t => t wm_MDICASCADE :: Num t => t wm_MDICREATE :: Num t => t wm_MDIDESTROY :: Num t => t wm_MDIGETACTIVE :: Num t => t wm_MDIICONARRANGE :: Num t => t wm_MDIMAXIMIZE :: Num t => t wm_MDINEXT :: Num t => t wm_MDIREFRESHMENU :: Num t => t wm_MDIRESTORE :: Num t => t wm_MDISETMENU :: Num t => t wm_MDITILE :: Num t => t wm_MEASUREITEM :: Num t => t wm_MENUCHAR :: Num t => t wm_MENUCOMMAND :: Num t => t wm_MENUDRAG :: Num t => t wm_MENUGETOBJECT :: Num t => t wm_MENURBUTTONUP :: Num t => t wm_MENUSELECT :: Num t => t wm_MOUSEACTIVATE :: Num t => t wm_MOUSEFIRST :: Num t => t wm_MOUSEHOVER :: Num t => t wm_MOUSELAST :: Num t => t wm_MOUSELEAVE :: Num t => t wm_MOUSEMOVE :: Num t => t wm_MOUSEWHEEL :: Num t => t wm_MOVE :: Num t => t wm_MOVING :: Num t => t wm_NCACTIVATE :: Num t => t wm_NCCALCSIZE :: Num t => t wm_NCCREATE :: Num t => t wm_NCDESTROY :: Num t => t wm_NCHITTEST :: Num t => t wm_NCLBUTTONDBLCLK :: Num t => t wm_NCLBUTTONDOWN :: Num t => t wm_NCLBUTTONUP :: Num t => t wm_NCMBUTTONDBLCLK :: Num t => t wm_NCMBUTTONDOWN :: Num t => t wm_NCMBUTTONUP :: Num t => t wm_NCMOUSEHOVER :: Num t => t wm_NCMOUSELEAVE :: Num t => t wm_NCMOUSEMOVE :: Num t => t wm_NCPAINT :: Num t => t wm_NCRBUTTONDBLCLK :: Num t => t wm_NCRBUTTONDOWN :: Num t => t wm_NCRBUTTONUP :: Num t => t wm_NCXBUTTONDBLCLK :: Num t => t wm_NCXBUTTONDOWN :: Num t => t wm_NCXBUTTONUP :: Num t => t wm_NEXTDLGCTL :: Num t => t wm_NEXTMENU :: Num t => t wm_NOTIFY :: Num t => t wm_NOTIFYFORMAT :: Num t => t wm_NULL :: Num t => t wm_PAINT :: Num t => t wm_PAINTCLIPBOARD :: Num t => t wm_PAINTICON :: Num t => t wm_PALETTECHANGED :: Num t => t wm_PALETTEISCHANGING :: Num t => t wm_PARENTNOTIFY :: Num t => t wm_PASTE :: Num t => t wm_PENWINFIRST :: Num t => t wm_PENWINLAST :: Num t => t wm_POWER :: Num t => t wm_POWERBROADCAST :: Num t => t wm_PRINT :: Num t => t wm_PRINTCLIENT :: Num t => t wm_QUERYDRAGICON :: Num t => t wm_QUERYENDSESSION :: Num t => t wm_QUERYNEWPALETTE :: Num t => t wm_QUERYOPEN :: Num t => t wm_QUERYUISTATE :: Num t => t wm_QUEUESYNC :: Num t => t wm_QUIT :: Num t => t wm_RBUTTONDBLCLK :: Num t => t wm_RBUTTONDOWN :: Num t => t wm_RBUTTONUP :: Num t => t wm_RASDIALEVENT :: Num t => t wm_RENDERALLFORMATS :: Num t => t wm_RENDERFORMAT :: Num t => t wm_SETCURSOR :: Num t => t wm_SETFOCUS :: Num t => t wm_SETFONT :: Num t => t wm_SETHOTKEY :: Num t => t wm_SETICON :: Num t => t wm_SETREDRAW :: Num t => t wm_SETTEXT :: Num t => t wm_SETTINGCHANGE :: Num t => t wm_SHOWWINDOW :: Num t => t wm_SIZE :: Num t => t wm_SIZECLIPBOARD :: Num t => t wm_SIZING :: Num t => t wm_SPOOLERSTATUS :: Num t => t wm_STYLECHANGED :: Num t => t wm_STYLECHANGING :: Num t => t wm_SYNCPAINT :: Num t => t wm_SYSCHAR :: Num t => t wm_SYSCOLORCHANGE :: Num t => t wm_SYSCOMMAND :: Num t => t wm_SYSDEADCHAR :: Num t => t wm_SYSKEYDOWN :: Num t => t wm_SYSKEYUP :: Num t => t wm_TABLET_FIRST :: Num t => t wm_TABLET_LAST :: Num t => t wm_THEMECHANGED :: Num t => t wm_TCARD :: Num t => t wm_TIMECHANGE :: Num t => t wm_TIMER :: Num t => t wm_UNDO :: Num t => t wm_UNICHAR :: Num t => t wm_UNINITMENUPOPUP :: Num t => t wm_UPDATEUISTATE :: Num t => t wm_USER :: Num t => t wm_USERCHANGED :: Num t => t wm_VKEYTOITEM :: Num t => t wm_VSCROLL :: Num t => t wm_VSCROLLCLIPBOARD :: Num t => t wm_WINDOWPOSCHANGED :: Num t => t wm_WINDOWPOSCHANGING :: Num t => t wm_WININICHANGE :: Num t => t wm_WTSSESSION_CHANGE :: Num t => t wm_XBUTTONDBLCLK :: Num t => t wm_XBUTTONDOWN :: Num t => t wm_XBUTTONUP :: Num t => t abm_ACTIVATE :: Num t => t abm_GETAUTOHIDEBAR :: Num t => t abm_GETSTATE :: Num t => t abm_GETTASKBARPOS :: Num t => t abm_NEW :: Num t => t abm_QUERYPOS :: Num t => t abm_REMOVE :: Num t => t abm_SETAUTOHIDEBAR :: Num t => t abm_SETPOS :: Num t => t abm_WINDOWPOSCHANGED :: Num t => t dbt_APPYBEGIN :: Num t => t dbt_APPYEND :: Num t => t dbt_CONFIGCHANGECANCELED :: Num t => t dbt_CONFIGCHANGED :: Num t => t dbt_CONFIGMGAPI32 :: Num t => t dbt_CONFIGMGPRIVATE :: Num t => t dbt_CUSTOMEVENT :: Num t => t dbt_DEVICEARRIVAL :: Num t => t dbt_DEVICEQUERYREMOVE :: Num t => t dbt_DEVICEQUERYREMOVEFAILED :: Num t => t dbt_DEVICEREMOVECOMPLETE :: Num t => t dbt_DEVICEREMOVEPENDING :: Num t => t dbt_DEVICETYPESPECIFIC :: Num t => t dbt_DEVNODES_CHANGED :: Num t => t dbt_DEVTYP_DEVICEINTERFACE :: Num t => t dbt_DEVTYP_DEVNODE :: Num t => t dbt_DEVTYP_HANDLE :: Num t => t dbt_DEVTYP_NET :: Num t => t dbt_DEVTYP_OEM :: Num t => t dbt_DEVTYP_PORT :: Num t => t dbt_DEVTYP_VOLUME :: Num t => t dbt_LOW_DISK_SPACE :: Num t => t dbt_MONITORCHANGE :: Num t => t dbt_NO_DISK_SPACE :: Num t => t dbt_QUERYCHANGECONFIG :: Num t => t dbt_SHELLLOGGEDON :: Num t => t dbt_USERDEFINED :: Num t => t dbt_VOLLOCKLOCKFAILED :: Num t => t dbt_VOLLOCKLOCKRELEASED :: Num t => t dbt_VOLLOCKLOCKTAKEN :: Num t => t dbt_VOLLOCKQUERYLOCK :: Num t => t dbt_VOLLOCKQUERYUNLOCK :: Num t => t dbt_VOLLOCKUNLOCKFAILED :: Num t => t dbt_VPOWERDAPI :: Num t => t dbt_VXDINITCOMPLETE :: Num t => t dm_BITSPERPEL :: Num t => t dm_COLLATE :: Num t => t dm_COLOR :: Num t => t dm_COPIES :: Num t => t dm_DEFAULTSOURCE :: Num t => t dm_DISPLAYFLAGS :: Num t => t dm_DISPLAYFREQUENCY :: Num t => t dm_DITHERTYPE :: Num t => t dm_DUPLEX :: Num t => t dm_FORMNAME :: Num t => t dm_GRAYSCALE :: Num t => t dm_ICMINTENT :: Num t => t dm_ICMMETHOD :: Num t => t dm_INTERLACED :: Num t => t dm_LOGPIXELS :: Num t => t dm_MEDIATYPE :: Num t => t dm_NUP :: Num t => t dm_ORIENTATION :: Num t => t dm_PANNINGHEIGHT :: Num t => t dm_PANNINGWIDTH :: Num t => t dm_PAPERLENGTH :: Num t => t dm_PAPERSIZE :: Num t => t dm_PAPERWIDTH :: Num t => t dm_PELSHEIGHT :: Num t => t dm_PELSWIDTH :: Num t => t dm_POSITION :: Num t => t dm_PRINTQUALITY :: Num t => t dm_SCALE :: Num t => t dm_SPECVERSION :: Num t => t dm_TTOPTION :: Num t => t dm_YRESOLUTION :: Num t => t hdm_FIRST :: Num t => t lvm_FIRST :: Num t => t sb_CONST_ALPHA :: Num t => t sb_GRAD_RECT :: Num t => t sb_GRAD_TRI :: Num t => t sb_NONE :: Num t => t sb_PIXEL_ALPHA :: Num t => t sb_PREMULT_ALPHA :: Num t => t sb_SIMPLEID :: Num t => t sbm_ENABLE_ARROWS :: Num t => t sbm_GETPOS :: Num t => t sbm_GETRANGE :: Num t => t sbm_GETSCROLLINFO :: Num t => t sbm_SETPOS :: Num t => t sbm_SETRANGE :: Num t => t sbm_SETRANGEREDRAW :: Num t => t sbm_SETSCROLLINFO :: Num t => t stm_GETICON :: Num t => t stm_GETIMAGE :: Num t => t stm_MSGMAX :: Num t => t stm_ONLY_THIS_INTERFACE :: Num t => t stm_ONLY_THIS_NAME :: Num t => t stm_ONLY_THIS_PROTOCOL :: Num t => t stm_ONLY_THIS_TYPE :: Num t => t stm_SETICON :: Num t => t stm_SETIMAGE :: Num t => t tcm_FIRST :: Num t => t pbm_SETRANGE :: Num t => t pbm_SETPOS :: Num t => t pbm_DELTAPOS :: Num t => t pbm_SETSTEP :: Num t => t pbm_STEPIT :: Num t => t pbm_GETPOS :: Num t => t pbm_SETMARQUEE :: Num t => t -- | NSIS (Nullsoft Scriptable Install System, -- http://nsis.sourceforge.net/) is a tool that allows programmers -- to create installers for Windows. This library provides an alternative -- syntax for NSIS scripts, as an embedded Haskell language, removing -- much of the hard work in developing an install script. Simple NSIS -- installers should look mostly the same, complex ones should be -- significantly more maintainable. -- -- As a simple example of using this library: -- --
-- import Development.NSIS -- -- main = writeFile "example1.nsi" $ nsis $ do -- name "Example1" -- The name of the installer -- outFile "example1.exe" -- Where to produce the installer -- installDir "$DESKTOP/Example1" -- The default installation directory -- requestExecutionLevel User -- Request application privileges for Windows Vista -- -- Pages to display -- page Directory -- Pick where to install -- page InstFiles -- Give a progress bar while installing -- -- Groups fo files to install -- section "" [] $ do -- setOutPath "$INSTDIR" -- Where to install files in this section -- file [] "Example1.hs" -- File to put into this section -- ---- -- The file example1.nsi can now be processed with -- makensis to produce the installer example1.exe. For -- more examples, see the Examples source directory. -- -- Much of the documentation from the Installer section is taken from the -- NSIS documentation. module Development.NSIS -- | Create the contents of an NSIS script from an installer specification. -- -- Beware, unsafeInject and unsafeInjectGlobal may break -- nsis. The optimizer relies on invariants that may not hold when -- arbitrary lines are injected. Consider using nsisNoOptimise if -- problems arise. nsis :: Action a -> String -- | Like nsis, but don't try and optimise the resulting NSIS -- script. -- -- Useful to figure out how the underlying installer works, or if you -- believe the optimisations are introducing bugs. Please do report any -- such bugs, especially if you aren't using unsafeInject or -- unsafeInjectGlobal! nsisNoOptimise :: Action a -> String -- | Monad in which installers are defined. A useful command to start with -- is section. data Action a -- | The type of expressions - namely an Action producing a -- Value. There are instances for Num and IsString, -- and turning on {-# LANGUAGE OverloadedStrings #-} is strongly -- recommended. -- -- The fromString function converts any embedded $VAR -- into a variable lookup, which may refer to one of the builtin NSIS -- variables (e.g. $SMPROGRAMS, $TEMP, -- $PROGRAMFILES), or a named variable created with -- constant or mutable. The string $$ is used to -- escape $ values. Bracket the variables to put text characters -- afterwards (e.g. $(SMPROGRAMS)XXX). In contrast to standard -- strings, / is treated as \ and // is -- treated as /. Remember to escape any slashes occuring in -- URLs. -- -- If the string is Exp String then any Int -- variables used will be automatically shown (see strShow). If -- the string is Exp ty then it must be of the form -- "$VAR" where $VAR is a variable of type ty. -- -- The Eq and Ord instances for Exp throw errors for -- all comparisons (use %==, %<= etc), but min -- and max are defined. The Num (arithmetic) and -- Monoid (string concatenation) instances are both fully -- implemented. From Integral and Fractional, only -- /, mod and div are implemented, and all as -- integer arithmetic. No functions from Enum or Real are -- implemented. -- -- When using a single expression multiple times, to ensure it is not -- evaluated repeatedly, use share. type Exp ty = Action (Value ty) -- | A Value, only used by Exp, which can be produced using -- return. The ty argument should be one of -- String, Int or Bool. data Value ty -- | The Exp language is call-by-name, meaning you must use share to -- avoid evaluating an exression multiple times. Using share, if -- the expression has any side effects they will be run immediately, but -- not on subsequent uses. When defining functions operating on -- Exp, if you use the same input expression twice, you should -- share it. For example: -- --
-- strPalindrom x = share x $ \x -> x %== strReverse x ---- -- If the expression was not shared, and x read from a file, -- then the file would be read twice. share :: Exp t -> (Exp t -> Action a) -> Action a -- | Introduce a variable scope. Scopes are automatically introduced by -- operations such as iff, loop, while etc. Inside a -- scope you may define new variables whose names may clash with -- variables outside the scope, but the local versions will be used. -- -- If you have any non-evaluated expressions, before introducing any -- potentially clashing variables in the scope you should share -- them or use constant_ on them. For example: -- --
-- operate x = do -- x <- constant_ x -- scope $ do -- constant "TEST" 0 ---- -- It is important to turn x into a constant_ before -- defining a new constant $TEST, since if x refers to -- $TEST after the new definition, it will pick up the wrong -- variable. scope :: Action a -> Action a -- | Create a constant with a name, ensuring the expression is shared. -- After defining the expression, you can refer to it with $NAME -- in a String. To introduce a new scope, see scope. -- --
-- constant "HELLO" "Hello World" -- alert "$HELLO!" --constant :: Typeable t => String -> Exp t -> Action (Exp t) -- | Create a constant with no name, ensuring the expression is shared. -- Equivalent to share return. constant_ :: Exp t -> Action (Exp t) -- | Create a mutable variable a name, which can be modified with -- @=. After defining the expression, you can refer to it with -- $NAME in a String. To introduce a new scope, see -- scope. -- --
-- h <- mutable "HELLO" "Hello World" -- "$HELLO" @= "$HELLO!" -- h @= "$HELLO!" -- equivalent to the above -- alert "$HELLO" -- with 2 exclamation marks --mutable :: Typeable t => String -> Exp t -> Action (Exp t) -- | Create an unnamed mutable variable, which can be modified with -- @=. -- --
-- h <- mutable "Hello World" -- h @= h & "!" -- alert h --mutable_ :: Exp t -> Action (Exp t) -- | Assign a value to a mutable variable. The variable must have been -- originally created with mutable or mutable_, or there -- will be an error when generating the install file. (@=) :: Exp t -> Exp t -> Action () infix 1 @= -- | Versions of mutable and constant restricted to -- Exp Int, used to avoid ambiguous type errors. mutableInt :: String -> Exp Int -> Action (Exp Int) -- | Versions of mutable and constant restricted to -- Exp Int, used to avoid ambiguous type errors. constantInt :: String -> Exp Int -> Action (Exp Int) -- | Versions of mutable_ and constant_ restricted to -- Exp Int, used to avoid ambiguous type errors. mutableInt_ :: Exp Int -> Action (Exp Int) -- | Versions of mutable_ and constant_ restricted to -- Exp Int, used to avoid ambiguous type errors. constantInt_ :: Exp Int -> Action (Exp Int) -- | Versions of mutable and constant restricted to -- Exp String, used to avoid ambiguous type errors. mutableStr :: String -> Exp String -> Action (Exp String) -- | Versions of mutable and constant restricted to -- Exp String, used to avoid ambiguous type errors. constantStr :: String -> Exp String -> Action (Exp String) -- | Versions of mutable_ and constant_ restricted to -- Exp String, used to avoid ambiguous type errors. mutableStr_ :: Exp String -> Action (Exp String) -- | Versions of mutable_ and constant_ restricted to -- Exp String, used to avoid ambiguous type errors. constantStr_ :: Exp String -> Action (Exp String) -- | Test a boolean expression, reunning the first action if it is -- true and the second if it is false. The appropriate -- branch action will be run within a scope. See ? for an -- expression orientated version. -- --
-- iff (x %== 12) (alert "is 12") (alert "is not 12") --iff :: Exp Bool -> Action () -> Action () -> Action () -- | A version of iff where there is no else action. iff_ :: Exp Bool -> Action () -> Action () -- | A while loop, run the second argument while the first argument is -- true. The action is run in a scope. See also loop. -- --
-- x <- mutable_ x -- while (x %< 10) $ do -- x @= x + 1 --while :: Exp Bool -> Action () -> Action () -- | A loop with a break command. Run the action repeatedly until -- the breaking action is called. The action is run in a scope. -- See also while. -- --
-- x <- mutable_ x -- loop $ \break -> do -- iff_ (x %>= 10) break -- x @= x + 1 --loop :: (Action () -> Action ()) -> Action () -- | Run an intitial action, and if that action causes an error, run the -- second action. Unlike other programming languages, any uncaught errors -- are silently ignored. All actions are run in scope. -- --
-- onError (exec "\"$WINDIR/notepad.exe\"") (alert "Failed to run notepad") --onError :: Action () -> Action () -> Action () -- | An expression orientated version of iff, returns the first -- component if the first argument is true or the second if it is -- false. -- --
-- x %== 12 ? (x, x + 5) --(?) :: Exp Bool -> (Exp t, Exp t) -> Exp t infix 2 ? -- | Short circuiting boolean operators, equivalent to && -- and || but on Exp. (%&&) :: Exp Bool -> Exp Bool -> Exp Bool infixr 3 %&& -- | Short circuiting boolean operators, equivalent to && -- and || but on Exp. (%||) :: Exp Bool -> Exp Bool -> Exp Bool infixr 2 %|| -- | A code label, used for goto programming, see newLabel. data Label -- | Create a new label, used with goto and label to write -- line jump based programming. Where possible you should use structured -- alternatives, such as iff, while and loop. Each -- created label must be used with one call to label, and any -- number of calls to goto. As an example: -- --
-- abort <- newLabel -- while var $ do -- iff_ cond1 $ goto abort -- iff_ cond2 $ goto abort -- var @= strDrop 1 var -- label abort ---- -- Note that the above example could have been written in a simpler -- manner with loop. newLabel :: Action Label -- | Define the location of a label, see newLabel for -- details. This function will fail if the same Label is passed to -- label more than once. label :: Label -> Action () -- | Jump to a label, see newLabel for details. This function -- will fail if label is not used on the Label. goto :: Label -> Action () -- | Lift a String into an Exp str :: String -> Exp String -- | Lift an Int into an Exp int :: Int -> Exp Int -- | Lift a Bool into an Exp bool :: Bool -> Exp Bool -- | The standard equality operators, lifted to Exp. (%==) :: Exp a -> Exp a -> Exp Bool infix 4 %== -- | The standard equality operators, lifted to Exp. (%/=) :: Exp a -> Exp a -> Exp Bool infix 4 %/= -- | The standard comparison operators, lifted to Exp. (%<=) :: Exp Int -> Exp Int -> Exp Bool infix 4 %<= -- | The standard comparison operators, lifted to Exp. (%<) :: Exp Int -> Exp Int -> Exp Bool infix 4 %< -- | The standard comparison operators, lifted to Exp. (%>=) :: Exp Int -> Exp Int -> Exp Bool infix 4 %>= -- | The standard comparison operators, lifted to Exp. (%>) :: Exp Int -> Exp Int -> Exp Bool infix 4 %> -- | Boolean constants corresponding to True and False true :: Exp Bool -- | Boolean constants corresponding to True and False false :: Exp Bool -- | Boolean negation. not_ :: Exp Bool -> Exp Bool -- | Convert a String to an Int, any errors are silently -- ignored. strRead :: Exp String -> Exp Int -- | Convert an Int to a String by showing it. strShow :: Exp Int -> Exp String -- | Concatenate two strings, for example "$FOO" & "$BAR" is -- equivalent to "$FOO$BAR". (&) :: Exp String -> Exp String -> Exp String infixr 5 & -- | Perform string concatenation on a list of expressions. strConcat :: [Exp String] -> Exp String -- | Return the length of a string, strLength "test" %== 4. strLength :: Exp String -> Exp Int -- | Take the first n characters from a string, strTake 2 -- "test" %== "te". strTake :: Exp Int -> Exp String -> Exp String -- | Drop the first n characters from a string, strDrop 2 -- "test" %== "st". strDrop :: Exp Int -> Exp String -> Exp String -- | Replace one string with another string, in a target string. As some -- examples: -- --
-- strReplace "t" "XX" "test" %== "XXesXX" -- strReplace "ell" "" "hello world" %== "ho world" --strReplace :: Exp String -> Exp String -> Exp String -> Exp String -- | Is the first string a prefix of the second. strIsPrefixOf :: Exp String -> Exp String -> Exp Bool -- | Is the first string a prefix of the second. strIsSuffixOf :: Exp String -> Exp String -> Exp Bool -- | Join together a list of strings with \r\n after each line. -- Note that unlike standard unlines, we use the Windows -- convention line separator. strUnlines :: [Exp String] -> Exp String -- | NSIS (the underlying installer, not this library) uses fixed length -- string buffers, defaulting to 1024 bytes. Any strings longer than the -- limit may cause truncation or segfaults. You can get builds supporting -- longer strings from http://nsis.sourceforge.net/Special_Builds. -- -- Given strCheck msg val, if val exceeds the limit it -- will abort with msg, otherwise it will return -- val. strCheck :: Exp String -> Exp String -> Exp String -- | The type of a file handle, created by fileOpen. data FileHandle -- | Open a file, which must be closed explicitly with fileClose. -- Often it is better to use writeFile' or withFile -- instead. -- --
-- h <- fileOpen ModeWrite "C:/log.txt" -- fileWrite h "Hello world!" -- fileClose h --fileOpen :: FileMode -> Exp FilePath -> Action (Exp FileHandle) -- | Write a string to a file openned with fileOpen. fileWrite :: Exp FileHandle -> Exp String -> Action () -- | Close a file file openned with fileOpen. fileClose :: Exp FileHandle -> Action () -- | With a fileOpen perform some action, then automatically call -- fileClose. If the action argument jumps out of the section then -- the fileClose call will be missed. withFile' :: FileMode -> Exp FilePath -> (Exp FileHandle -> Action ()) -> Action () -- | Write a file, like writeFile. writeFile' :: Exp FilePath -> Exp String -> Action () -- | Write a file comprising of a set of lines. writeFileLines :: Exp FilePath -> [Exp String] -> Action () -- | Remove the specified directory (fully qualified path with no -- wildcards). Without Recursive, the directory will only be -- removed if it is completely empty. If Recursive is specified, -- the directory will be removed recursively, so all directories and -- files in the specified directory will be removed. If RebootOK -- is specified, any file or directory which could not have been removed -- during the process will be removed on reboot -- if any file or -- directory will be removed on a reboot, the reboot flag will be set. -- The error flag is set if any file or directory cannot be removed. -- --
-- rmdir [] "$INSTDIR" -- rmdir [] "$INSTDIR/data" -- rmdir [Recursive, RebootOK] "$INSTDIR" -- rmdir [RebootOK] "$INSTDIR/DLLs" ---- -- Note that the current working directory can not be deleted. The -- current working directory is set by setOutPath. For example, -- the following example will not delete the directory. -- --
-- setOutPath "$TEMP/dir" -- rmdir [] "$TEMP/dir" ---- -- The next example will succeed in deleting the directory. -- --
-- setOutPath "$TEMP/dir" -- setOutPath "$TEMP" -- rmdir [] "$TEMP/dir" ---- -- Warning: using rmdir [Recursive] "$INSTDIR" in -- uninstall is not safe. Though it is unlikely, the user might -- select to install to the Program Files folder and so this command will -- wipe out the entire Program Files folder, including other programs -- that has nothing to do with the uninstaller. The user can also put -- other files but the program's files and would expect them to get -- deleted with the program. Solutions are available for easily -- uninstalling only files which were installed by the installer. rmdir :: [Attrib] -> Exp FilePath -> Action () -- | Delete file (which can be a file or wildcard, but should be specified -- with a full path) from the target system. If RebootOK is -- specified and the file cannot be deleted then the file is deleted when -- the system reboots -- if the file will be deleted on a reboot, the -- reboot flag will be set. The error flag is set if files are found and -- cannot be deleted. The error flag is not set from trying to delete a -- file that does not exist. -- --
-- delete [] "$INSTDIR/somefile.dat" --delete :: [Attrib] -> Exp FilePath -> Action () -- | Both file paths are on the installing system. Do not use relative -- paths. copyFiles :: [Attrib] -> Exp FilePath -> Exp FilePath -> Action () -- | Gets the last write time of the file, you should only use the result -- to compare for equality with other results from getFileTime. On -- failure the error flag is set. getFileTime :: Exp FilePath -> Exp String -- | Checks for existence of file(s) (which can be a wildcard, or a -- directory). If you want to check to see if a file is a directory, use -- fileExists "DIRECTORY/*.*". -- --
-- iff_ (fileExists "$WINDIR/notepad.exe") $ -- messageBox [MB_OK] "notepad is installed" --fileExists :: Exp FilePath -> Exp Bool -- | Performs a search for filespec, running the action with each file -- found. If no files are found the error flag is set. Note that the -- filename output is without path. -- --
-- findEach "$INSTDIR/*.txt" $ \x -> -- detailPrint x ---- -- If you jump from inside the loop to after the loop then you may leak a -- search handle. findEach :: Exp FilePath -> (Exp FilePath -> Action ()) -> Action () -- | Creates (recursively if necessary) the specified directory. Errors can -- be caught using onError. You should always specify an absolute -- path. -- --
-- createDirectory "$INSTDIR/some/directory" --createDirectory :: Exp FilePath -> Action () -- | Creates a shortcut file that links to a Traget file, with -- optional Parameters. The icon used for the shortcut is -- IconFile,IconIndex. StartOptions should be one -- of: SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED. -- KeyboardShortcut should be in the form of 'flag|c' where flag -- can be a combination (using |) of: ALT, CONTROL, EXT, or SHIFT. c is -- the character to use (a-z, A-Z, 0-9, F1-F24, etc). Note that no spaces -- are allowed in this string. A good example is "ALT|CONTROL|F8". -- $OUTDIR is used for the working directory. You can change it -- by using setOutPath before creating the Shortcut. -- Description should be the description of the shortcut, or -- comment as it is called under XP. The error flag is set if the -- shortcut cannot be created (i.e. either of the paths (link or target) -- does not exist, or some other error). -- --
-- createDirectory "$SMPROGRAMS/My Company" -- createShortcut "$SMPROGRAMS/My Company/My Program.lnk" -- [Target "$INSTDIR/My Program.exe" -- ,Parameters "some command line parameters" -- ,IconFile "$INSTDIR/My Program.exe", IconIndex 2 -- ,StartOptions "SW_SHOWNORMAL" -- ,KeyboardShortcut "ALT|CONTROL|SHIFT|F5" -- ,Description "a description"] --createShortcut :: Exp FilePath -> [Attrib] -> Action () readRegStr :: HKEY -> Exp String -> Exp String -> Exp String deleteRegKey :: HKEY -> Exp String -> Action () deleteRegValue :: HKEY -> Exp String -> Exp String -> Action () writeRegStr :: HKEY -> Exp String -> Exp String -> Exp String -> Action () writeRegExpandStr :: HKEY -> Exp String -> Exp String -> Exp String -> Action () writeRegDWORD :: HKEY -> Exp String -> Exp String -> Exp Int -> Action () envVar :: Exp String -> Exp String -- | Execute the specified program and continue immediately. Note that the -- file specified must exist on the target system, not the compiling -- system. $OUTDIR is used for the working directory. Errors can -- be caught using onError. Note, if the command could have -- spaces, you should put it in quotes to delimit it from parameters. -- e.g.: exec "\"$INSTDIR/command.exe\" parameters". If you -- don't put it in quotes it will not work on Windows 9x with or without -- parameters. -- --
-- exec "\"$INSTDIR/someprogram.exe\"" -- exec "\"$INSTDIR/someprogram.exe\" some parameters" --exec :: Exp String -> Action () execWait :: Exp String -> Action () execShell :: [ShowWindow] -> Exp String -> Action () -- | Sleep time in milliseconds sleep :: Exp Int -> Action () abort :: Exp String -> Action () type HWND = Exp Int hwndParent :: HWND findWindow :: Exp String -> Exp String -> Maybe HWND -> Action HWND getDlgItem :: HWND -> Exp Int -> Action HWND sendMessage :: [Attrib] -> HWND -> Exp Int -> Exp a -> Exp b -> Action (Exp Int) -- | Call a plugin. If the arguments are of different types use -- exp_. As an example: -- --
-- encrypt x = share x $ \x -> do -- plugin "Base64" "Encrypt" [exp_ x, exp_ $ strLength x] ---- -- The only thing to be careful about is that we use the x -- parameter twice, so should share it to ensure it is only -- evaluated once. plugin :: String -> String -> [Exp a] -> Action () -- | Push a value onto the stack. Only useful with plugin. push :: Exp a -> Action () -- | Pop a value off the stack, will set an error if there is nothing on -- the stack. Only useful with plugin. pop :: Exp String -- | Erase the type of an Exp, only useful with plugin. exp_ :: Exp a -> Exp () -- | Add a plugin directory addPluginDir :: Exp String -> Action () -- | Sets the name of the installer. The name is usually simply the product -- name such as 'MyApp' or 'Company MyApp'. -- --
-- name "MyApp" --name :: Exp String -> Action () -- | Specifies the output file that MakeNSIS should write the -- installer to. This is just the file that MakeNSIS writes, it doesn't -- affect the contents of the installer. Usually should end with -- .exe. -- --
-- outFile "installer.exe" --outFile :: Exp FilePath -> Action () -- | Sets the default installation directory. Note that the part of this -- string following the last \ will be used if the user selects -- browse, and may be appended back on to the string at install -- time (to disable this, end the directory with a \). If this -- doesn't make any sense, play around with the browse button a bit. -- --
-- installDir "$PROGRAMFILES/MyApp" --installDir :: Exp FilePath -> Action () setCompressor :: Compressor -> [Attrib] -> Action () -- | Set the icon used for the installer/uninstaller. -- --
-- installIcon "$NSISDIR/Contrib/Graphics/Icons/modern-install.ico" --installIcon :: Exp FilePath -> Action () -- | Set the icon used for the installer/uninstaller. -- --
-- installIcon "$NSISDIR/Contrib/Graphics/Icons/modern-install.ico" --uninstallIcon :: Exp FilePath -> Action () -- | Set the image used for the header splash. Pass Nothing to use -- the default header image. -- --
-- headerImage $ Just "$NSISDIR/Contrib/Graphics/Header/win.bmp" --headerImage :: Maybe (Exp FilePath) -> Action () -- | This attribute tells the installer to check a string in the registry, -- and use it for the install dir if that string is valid. If this -- attribute is present, it will override the installDir attribute -- if the registry key is valid, otherwise it will fall back to the -- installDir default. When querying the registry, this command -- will automatically remove any quotes. If the string ends in ".exe", it -- will automatically remove the filename component of the string (i.e. -- if the string is "C:program filesfoo/foo.exe", it will know to -- use "C:program filesfoo"). -- --
-- installDirRegKey HKLM "Software/NSIS" "" -- installDirRegKey HKLM "Software/ACME/Thingy" "InstallLocation" --installDirRegKey :: HKEY -> Exp String -> Exp String -> Action () allowRootDirInstall :: Bool -> Action () caption :: Exp String -> Action () showInstDetails :: Visibility -> Action () showUninstDetails :: Visibility -> Action () -- | Note: Requires NSIS 3.0 unicode :: Bool -> Action () requestExecutionLevel :: Level -> Action () data SectionId section :: Exp String -> [Attrib] -> Action () -> Action SectionId sectionGroup :: Exp String -> [Attrib] -> Action () -> Action SectionId newSectionId :: Action SectionId sectionSetText :: SectionId -> Exp String -> Action () sectionGetText :: SectionId -> Exp String sectionSet :: SectionId -> SectionFlag -> Exp Bool -> Action () sectionGet :: SectionId -> SectionFlag -> Exp Bool uninstall :: Action () -> Action () page :: Page -> Action () unpage :: Page -> Action () finishOptions :: FinishOptions -- | Create a function, useful for registering actions event :: String -> Action () -> Action () onSelChange :: Action () -> Action () onPageShow :: Page -> Action () -> Action () onPagePre :: Page -> Action () -> Action () onPageLeave :: Page -> Action () -> Action () file :: [Attrib] -> Exp FilePath -> Action () -- | Set all file actions to automatically take NonFatal. alwaysNonFatal :: Action () -> Action () -- | Writes the uninstaller to the filename (and optionally path) -- specified. Only valid from within an install section, and requires -- that you have an uninstall section in your script. You can call -- this one or more times to write out one or more copies of the -- uninstaller. -- --
-- writeUninstaller "$INSTDIR/uninstaller.exe" --writeUninstaller :: Exp FilePath -> Action () -- | Show an alert, equivalent to messageBox [MB_ICONEXCLAMATION]. alert :: Exp String -> Action () -- | Sets the output path ($OUTDIR) and creates it (recursively if -- necessary), if it does not exist. Must be a full pathname, usually is -- just $INSTDIR. -- --
-- setOutPath "$INSTDIR" --setOutPath :: Exp FilePath -> Action () messageBox :: [MessageBoxType] -> Exp String -> Action (Exp String) -- | While the action is executing, do not update the progress bar. Useful -- for functions which do a large amount of computation, or have loops. hideProgress :: Action a -> Action a detailPrint :: Exp String -> Action () setDetailsPrint :: DetailsPrint -> Action () -- | Inject arbitrary text into a non-global section of the script. unsafeInject :: String -> Action () -- | Inject arbitrary text into the script's global header section. unsafeInjectGlobal :: String -> Action () data Compressor LZMA :: Compressor ZLIB :: Compressor BZIP2 :: Compressor data HKEY HKCR :: HKEY HKEY_CLASSES_ROOT :: HKEY HKLM :: HKEY HKEY_LOCAL_MACHINE :: HKEY HKCU :: HKEY HKEY_CURRENT_USER :: HKEY HKU :: HKEY HKEY_USERS :: HKEY HKCC :: HKEY HKEY_CURRENT_CONFIG :: HKEY HKDD :: HKEY HKEY_DYN_DATA :: HKEY HKPD :: HKEY HKEY_PERFORMANCE_DATA :: HKEY SHCTX :: HKEY SHELL_CONTEXT :: HKEY data MessageBoxType -- | Display with an OK button MB_OK :: MessageBoxType -- | Display with an OK and a cancel button MB_OKCANCEL :: MessageBoxType -- | Display with abort, retry, ignore buttons MB_ABORTRETRYIGNORE :: MessageBoxType -- | Display with retry and cancel buttons MB_RETRYCANCEL :: MessageBoxType -- | Display with yes and no buttons MB_YESNO :: MessageBoxType -- | Display with yes, no, cancel buttons MB_YESNOCANCEL :: MessageBoxType -- | Display with exclamation icon MB_ICONEXCLAMATION :: MessageBoxType -- | Display with information icon MB_ICONINFORMATION :: MessageBoxType -- | Display with question mark icon MB_ICONQUESTION :: MessageBoxType -- | Display with stop icon MB_ICONSTOP :: MessageBoxType -- | Display with installer's icon MB_USERICON :: MessageBoxType -- | Make messagebox topmost MB_TOPMOST :: MessageBoxType -- | Set foreground MB_SETFOREGROUND :: MessageBoxType -- | Right align text MB_RIGHT :: MessageBoxType -- | RTL reading order MB_RTLREADING :: MessageBoxType -- | Button 1 is default MB_DEFBUTTON1 :: MessageBoxType -- | Button 2 is default MB_DEFBUTTON2 :: MessageBoxType -- | Button 3 is default MB_DEFBUTTON3 :: MessageBoxType -- | Button 4 is default MB_DEFBUTTON4 :: MessageBoxType data Attrib Solid :: Attrib Final :: Attrib RebootOK :: Attrib Silent :: Attrib FilesOnly :: Attrib NonFatal :: Attrib Recursive :: Attrib Unselected :: Attrib Expanded :: Attrib Description :: (Exp String) -> Attrib Required :: Attrib Target :: (Exp String) -> Attrib Parameters :: (Exp String) -> Attrib IconFile :: (Exp String) -> Attrib IconIndex :: (Exp Int) -> Attrib StartOptions :: String -> Attrib KeyboardShortcut :: String -> Attrib Id :: SectionId -> Attrib Timeout :: Int -> Attrib OName :: (Exp String) -> Attrib data Page License :: FilePath -> Page Components :: Page Directory :: Page InstFiles :: Page Confirm :: Page Finish :: FinishOptions -> Page data Level None :: Level User :: Level Highest :: Level Admin :: Level data Visibility Hide :: Visibility Show :: Visibility NeverShow :: Visibility -- | Mode to use with 'Development. data FileMode -- | Read a file. ModeRead :: FileMode ModeWrite :: FileMode -- | Opened for both read and write, contents preserved. ModeAppend :: FileMode data SectionFlag SF_Selected :: SectionFlag SF_SectionGroup :: SectionFlag SF_SectionGroupEnd :: SectionFlag SF_Bold :: SectionFlag SF_ReadOnly :: SectionFlag SF_Expand :: SectionFlag SF_PartiallySelected :: SectionFlag data ShowWindow SW_SHOWDEFAULT :: ShowWindow SW_SHOWNORMAL :: ShowWindow SW_SHOWMAXIMIZED :: ShowWindow SW_SHOWMINIMIZED :: ShowWindow SW_HIDE :: ShowWindow data FinishOptions FinishOptions :: String -> String -> String -> Bool -> String -> String -> Bool -> String -> String -> FinishOptions [finRun] :: FinishOptions -> String [finRunText] :: FinishOptions -> String [finRunParamters] :: FinishOptions -> String [finRunChecked] :: FinishOptions -> Bool [finReadme] :: FinishOptions -> String [finReadmeText] :: FinishOptions -> String [finReadmeChecked] :: FinishOptions -> Bool [finLink] :: FinishOptions -> String [finLinkText] :: FinishOptions -> String -- | Value to use with setDetailsPrint. data DetailsPrint NoDetailsPrint :: DetailsPrint ListOnly :: DetailsPrint TextOnly :: DetailsPrint Both :: DetailsPrint LastUsed :: DetailsPrint -- | Base64 plugin: http://nsis.sourceforge.net/Base64_plug-in module Development.NSIS.Plugins.Base64 -- | Base64 data encryption. encrypt :: Exp String -> Exp String -- | Base64 decryption. Reverse of encrypt. decrypt :: Exp String -> Exp String -- | Module for updating environment variables. All functions take either -- HKLM to modify the variable for the machine, or HKCU to -- modify for the user. -- -- Warning: If you are modifying PATH, make sure you use a special -- build of NSIS which can cope with longer strings, or you will corrupt -- your users path. module Development.NSIS.Plugins.EnvVarUpdate -- | Read a variable from the registry. If you are not modifying the -- variable you should use envVar instead. getEnvVar :: HKEY -> Exp String -> Exp String -- | Set an environment variable by writing to the registry. setEnvVar :: HKEY -> Exp String -> Exp String -> Action () -- | Delete the environment variable in the registry. deleteEnvVar :: HKEY -> Exp String -> Action () setEnvVarAppend :: HKEY -> Exp String -> Exp String -> Action () setEnvVarPrepend :: HKEY -> Exp String -> Exp String -> Action () setEnvVarRemove :: HKEY -> Exp String -> Exp String -> Action () -- | Plugin to change how many sections can be selected at once. module Development.NSIS.Plugins.Sections atMostOneSection :: [SectionId] -> Action () exactlyOneSection :: [SectionId] -> Action () -- | Windows 7 Taskbar Progress plugin: -- http://nsis.sourceforge.net/TaskbarProgress_plug-in module Development.NSIS.Plugins.Taskbar -- | Enable Windows 7 taskbar plugin, called anywhere. taskbar :: Action ()