Skip to content
⌘ NSIS Forum Archive

How do I get a button to launch something useful? (Includes ways of how not to...)

11 posts

RobGrant#

How do I get a button to launch something useful? (Includes ways of how not to...)

Hi guys

I need to launch notepad.exe with a target file by pushing a button. It should look something like this I think:

!insertmacro MUI_INSTALLOPTIONS_WRITE "detectenv.ini" "Field 19" "State" \
"notepad C:\windows\dmcl.ini"

or

!insertmacro MUI_INSTALLOPTIONS_WRITE "detectenv.ini" "Field 19" "State" \
"notepad 'C:\windows\dmcl.ini'"

or

!insertmacro MUI_INSTALLOPTIONS_WRITE "detectenv.ini" "Field 19" "State" \
"notepad $\"C:\windows\dmcl.ini$\""

or

!insertmacro MUI_INSTALLOPTIONS_WRITE "detectenv.ini" "Field 19" "State" \
"notepad|C:\windows\dmcl.ini"

or

!insertmacro MUI_INSTALLOPTIONS_WRITE "detectenv.ini" "Field 19" "State" \
"notepad,C:\windows\dmcl.ini"

Etc. Those are many ways of not doing it, is there a way TO do it? 🙂

Rob
Comm@nder21#
none of them will work, you're right 🙂

first, the button must have the NOTIFY flag.
Flags=NOTIFY|<other flags if you have some>
then, search the forums, the archive and the install options readme, there's sample-code there how to check for the button beeing pressed and execute script code then.
Afrow UK#
Yep. You need Flags=NOTIFY for your button.

Then, in your Custom page's Leave function you need to do this:

ReadINIStr $R0 "ioFile.ini" "Settings" "State"
StrCmp $R0 2 0 +3 ; 2 is Button Field num
ExecShell "open" "file.ini"
Abort ; go back to page

-Stu
RobGrant#
OK cool thanks for the help so far guys, I was looking at NOTIFY not sure what to do with it 🙂

To make things a bit clearer, the ini file is detectenv.ini; the button is Field number 19.

The button starts off as Flags=READONLY; this is changed if the file I want to open with Notepad is detected.

So:

; Defined in the MUI section:
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE "detectenv-Leave"
!insertmacro MUI_PAGE_DETECTENV

Function "detectenv"
...
; if file is detected at C:\Windows\dmcl.ini
!insertmacro MUI_INSTALLOPTIONS_WRITE "detectenv.ini" \
"Field 19" "Flags" "NOTIFY"
...
FunctionEnd

Function "detectenv-Leave"
ReadINIStr $R0 "detectenv.ini" "Settings" "State"
StrCmp $R0 19 0 +3 ; 2 is Button Field num CHANGED TO 19
ExecShell "open" "C:\windows\dmcl.ini"
Abort ; go back to page
FunctionEnd

Does that look roughly right? It doesn't work straight off the bat but I will play...

And cheers again for help so far

-rob-
RobGrant#
Also it flicks to the next screen in the installer when I click the button, any chance of not making it do that? (Simply removing the Abort command does the obvious thing of quitting the installer 🙂
Afrow UK#
What's !insertmacro MUI_PAGE_DETECTENV? Have you created the macro yourself? If not then just use:

Page Custom detectenv detectenv-Leave

-Stu
RobGrant#
Ah yeah, makes sense, forgot I'd done that 🙂

Just used a macro there to make the MUI code look a bit tidier and more consistent.
RobGrant#
Any help regarding my other questions would be great as it still isn't working and I could take all day randomly trying each combination 😛
RobGrant#
Incidentally chucking a 'MessageBox MB_OK $R0' in after ' ReadINIStr $R0 "detectenv.ini" "Settings" "State"' shows that $R0 is set to nothing...