Custom Dialog Free Space Summary of all Drives
From NSIS Wiki
Jump to navigationJump to search
Author: Red Wine (talk, contrib) |
Description
The following example on how to create a custom dialog that shows a summary of target's required space and free space for all drives provided for the subject at this forum thread.
The Code
outfile 'customtest.exe' !define REQUIRED '30000' ; predefined required space in MBs !include 'FileFunc.nsh' !Include 'MUI.nsh' !insertmacro GetDrives !insertmacro DriveSpace !insertmacro MUI_PAGE_WELCOME page custom CustomCreate !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" Section - ####### SectionEnd Function CustomCreate Push $1 ;park value to the stack InstallOptions::initDialog /NOUNLOAD '$PLUGINSDIR\custom.ini' Pop $1 ;get dialog HWND ReadINIStr $2 "$PLUGINSDIR\custom.ini" "Field 1" "HWND" SetCtlColors $2 0x0000FF 0xFFFFFF CreateFont $3 "Tahoma" 7 800 SendMessage $2 ${WM_SETFONT} $3 0 InstallOptions::show Pop $1 ;get button action Pop $1 ;get custom.ini full path Pop $1 ;get back value from stack FunctionEnd Function GetDrivesCallBack ${DriveSpace} "$9" "/D=F /S=M" $R0 StrCpy $9 $9 1 IntCmp '$R0' '${REQUIRED}' +4 +4 0 StrCmp '$R2' 'state_ok' +3 WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'State' 'Drive: $9 \ Required Space = ${REQUIRED} Mbytes Free Space = $R0 Mbytes' StrCpy '$R2' 'state_ok' ReadIniStr '$R1' '$PLUGINSDIR\custom.ini' 'Field 1' 'ListItems' StrCmp '$R1' '' 0 addlist WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'ListItems' 'Drive: $9 \ Required Space = ${REQUIRED} Mbytes Free Space = $R0 Mbytes' goto end addlist: WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'ListItems' '$R1|Drive: $9 \ Required Space = ${REQUIRED} Mbytes Free Space = $R0 Mbytes' end: Push $0 FunctionEnd Function .onInit initpluginsdir file /oname=$PLUGINSDIR\custom.ini custom.ini ${GetDrives} "HDD" GetDrivesCallBack FunctionEnd
The custom.ini
[Settings] NumFields=1 [Field 1] Type=Listbox State= Left=12 Right=-11 Top=12 Bottom=36 Flags=
License
This script is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this code.
Permission is granted to anyone to use this script for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
- The origin of this script must not be misrepresented; you must not claim that you wrote the original code. If you use this header file in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- Altered versions must be plainly marked as such, and must not be misrepresented as being the original script.
- This notice may not be removed or altered from any distribution.