Windows 7 Cascading Context Menu: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 2: Line 2:
As of Windows 7, one can create cascading context menus through the registry.
As of Windows 7, one can create cascading context menus through the registry.


== Example Script ==
== Example Scripts ==
This example creates a cascaded context menu for the NSIS compiler, and if present also for the Unicode version of NSIS.
This example creates a cascaded context menu for the NSIS compiler, and if present also for the Unicode version of NSIS. The entries will be added to HKCR.
<highlight-nsis>Name "NSIS Window 7 Context Menu"
<highlight-nsis>Name "NSIS Window 7 Context Menu"
OutFile "nsW7Menu.exe"
OutFile "nsW7Menu.exe"
Line 44: Line 44:
WriteRegStr HKCR "NSIS.Script\W7Menu\shell\ucompile-compressor" "MUIVerb" "Compile Unicode NSIS Script (Choose Compressor)"
WriteRegStr HKCR "NSIS.Script\W7Menu\shell\ucompile-compressor" "MUIVerb" "Compile Unicode NSIS Script (Choose Compressor)"
WriteRegStr HKCR "NSIS.Script\W7Menu\shell\ucompile-compressor\command" "" '"$INSTDIR\Unicode\makensisw.exe" /ChooseCompressor "%1"'
WriteRegStr HKCR "NSIS.Script\W7Menu\shell\ucompile-compressor\command" "" '"$INSTDIR\Unicode\makensisw.exe" /ChooseCompressor "%1"'
End:
SectionEnd</highlight-nsis>
This alternative version will add the keys to the CommandStore of HKLM instead.
<highlight-nsis>OutFile "nsW7Menu-alt.exe"
RequestExecutionLevel admin
InstallDir $PROGRAMFILES\NSIS
InstallDirRegKey HKLM Software\NSIS ""
; Pages
Page directory
Page instfiles
; Sections
Section ""
;menu-name,submenu entries,icon
WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu" "MUIVerb" "NSIS"
WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu" "SubCommands" "NSIS.compile;NSIS.compile-compressor"
WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu" "Icon" "$INSTDIR\makensisw.exe,1"
WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu\command" "" ""
;compile
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.compile" "" "Compile NSIS Script"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.compile\command" "" '"$INSTDIR\makensisw.exe" "%1"'
;compile (choose compressor)
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.compile-compressor" "" "Compile NSIS Script (Choose Compressor)"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.compile-compressor\command" "" '"$INSTDIR\makensisw.exe" /ChooseCompressor "%1"'
;repeat for Unicode NSIS
IfFileExists "$INSTDIR\Unicode\makensisw.exe" 0 End
;add separator above the next entry
WriteRegDWORD HKCR "NSIS.Script\W7Menu\shell\ucompile" "CommandFlags" "32"
;submenu entries
WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu" "SubCommands" "NSIS.compile;NSIS.compile-compressor;NSIS.ucompile;NSIS.ucompile-compresso"
;compile unicode
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.ucompile" "" "Compile Unicode NSIS Script"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.ucompile\command" "" '"$INSTDIR\Unicode\makensisw.exe" "%1"'
;compile unicode (choose compressor)
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.ucompile-compressor" "" "Compile Unicode NSIS Script (Choose Compressor)"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.ucompile-compressor\command" "" '"$INSTDIR\Unicode\makensisw.exe" /ChooseCompressor "%1"'


End:
End:

Revision as of 10:53, 14 September 2011

Description

As of Windows 7, one can create cascading context menus through the registry.

Example Scripts

This example creates a cascaded context menu for the NSIS compiler, and if present also for the Unicode version of NSIS. The entries will be added to HKCR.

Name "NSIS Window 7 Context Menu"
OutFile "nsW7Menu.exe"
RequestExecutionLevel admin
 
InstallDir $PROGRAMFILES\NSIS
InstallDirRegKey HKLM Software\NSIS ""
 
; Pages
Page directory
Page instfiles
 
; Sections
Section ""
 
	;menu-name,submenu,icon
	WriteRegStr HKCR "NSIS.Script\shell\NSIS.W7Menu" "MUIVerb" "NSIS"
	WriteRegStr HKCR "NSIS.Script\shell\NSIS.W7Menu" "ExtendedSubCommandsKey" "NSIS.Script\W7Menu"
	WriteRegStr HKCR "NSIS.Script\shell\NSIS.W7Menu" "Icon" "$INSTDIR\makensisw.exe,1"
 
	;compile
	WriteRegStr HKCR "NSIS.Script\W7Menu\shell\compile" "MUIVerb" "Compile NSIS Script"
	WriteRegStr HKCR "NSIS.Script\W7Menu\shell\compile\command" "" '"$INSTDIR\makensisw.exe" "%1"'
 
	;compile (choose compressor)
	WriteRegStr HKCR "NSIS.Script\W7Menu\shell\compile-compressor" "MUIVerb" "Compile NSIS Script (Choose Compressor)"
	WriteRegStr HKCR "NSIS.Script\W7Menu\shell\compile-compressor\command" "" '"$INSTDIR\makensisw.exe" /ChooseCompressor "%1"'
 
	;repeat for Unicode NSIS
	IfFileExists "$INSTDIR\Unicode\makensisw.exe" 0 End		
 
	;add separator above the next entry
	WriteRegDWORD HKCR "NSIS.Script\W7Menu\shell\ucompile" "CommandFlags" "32"
 
	;compile unicode
	WriteRegStr HKCR "NSIS.Script\W7Menu\shell\ucompile" "MUIVerb" "Compile Unicode NSIS Script"
	WriteRegStr HKCR "NSIS.Script\W7Menu\shell\ucompile\command" "" '"$INSTDIR\Unicode\makensisw.exe" "%1"'
 
	;compile unicode (choose compressor)
	WriteRegStr HKCR "NSIS.Script\W7Menu\shell\ucompile-compressor" "MUIVerb" "Compile Unicode NSIS Script (Choose Compressor)"
	WriteRegStr HKCR "NSIS.Script\W7Menu\shell\ucompile-compressor\command" "" '"$INSTDIR\Unicode\makensisw.exe" /ChooseCompressor "%1"'
 
	End:
 
SectionEnd

This alternative version will add the keys to the CommandStore of HKLM instead.

OutFile "nsW7Menu-alt.exe"
RequestExecutionLevel admin
 
InstallDir $PROGRAMFILES\NSIS
InstallDirRegKey HKLM Software\NSIS ""
 
; Pages
Page directory
Page instfiles
 
; Sections
Section ""
 
	;menu-name,submenu entries,icon
	WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu" "MUIVerb" "NSIS"
	WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu" "SubCommands" "NSIS.compile;NSIS.compile-compressor"
	WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu" "Icon" "$INSTDIR\makensisw.exe,1"
 
	WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu\command" "" ""
 
	;compile
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.compile" "" "Compile NSIS Script"
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.compile\command" "" '"$INSTDIR\makensisw.exe" "%1"'
 
	;compile (choose compressor)
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.compile-compressor" "" "Compile NSIS Script (Choose Compressor)"
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.compile-compressor\command" "" '"$INSTDIR\makensisw.exe" /ChooseCompressor "%1"'
 
	;repeat for Unicode NSIS
	IfFileExists "$INSTDIR\Unicode\makensisw.exe" 0 End
 
	;add separator above the next entry
	WriteRegDWORD HKCR "NSIS.Script\W7Menu\shell\ucompile" "CommandFlags" "32"
 
	;submenu entries
	WriteRegStr HKLM "SOFTWARE\Classes\NSIS.Script\shell\NSIS.W7Menu" "SubCommands" "NSIS.compile;NSIS.compile-compressor;NSIS.ucompile;NSIS.ucompile-compresso"
 
	;compile unicode
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.ucompile" "" "Compile Unicode NSIS Script"
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.ucompile\command" "" '"$INSTDIR\Unicode\makensisw.exe" "%1"'
 
	;compile unicode (choose compressor)
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.ucompile-compressor" "" "Compile Unicode NSIS Script (Choose Compressor)"
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NSIS.ucompile-compressor\command" "" '"$INSTDIR\Unicode\makensisw.exe" /ChooseCompressor "%1"'
 
	End:
 
SectionEnd

Alternative Method

The MSDN forums mention an alternative method for creating cascading menus. This will create keys in the CommandStore (HKLM) rather than in HKCR.

Links

MSDN
NSIS Discussion