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 | == 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.