How add context menu item to Windows Explorer for folders
ContextmenuExplorerWindows Shell-Extension-MenuContextmenu Problem Overview
I have found out how to add right-click context menu items to files on Windows Explorer, by adding keys to the registry. I.e. I can right-click on a file in Explorer and run a custom app against that file.
I would like to do the same for a folder and have not found a way to do that (yet). I see articles on creating/writing custom context menu handlers, but I would rather not go there.
I have found an article here on how to add cascading context menu items to the Desktop and to the "Computer" in Explorer, but this does not work for any folder.
I would like to be able to add my custom app to the context menu and have it work on both files and folders. Is there a way to do this without writing a context menu handler?
I found the solution in the below article, which describes how to do this via the registry for files, as well as for folders:
The following two articles provided additional info and options:
Contextmenu Solutions
Solution 1 - Contextmenu
In the registration editor (regedit.exe
) find:
- Context menu for right click on folders in left panel of Windows Explorer or on background of a directory in right panel:
HKEY_CLASSES_ROOT\Directory\Background\shell
if you are administratorHKEY_CURRENT_USER\Software\Classes\directory\Background\shell
if you are a normal user
- Context menu for right click on folders in right panel of Windows Explorer:
HKEY_CLASSES_ROOT\Directory\shell
if you are administratorHKEY_CURRENT_USER\Software\Classes\directory\shell
if you are a normal user
- Context menu for any file:
HKEY_CLASSES_ROOT\*\shell
if you are administratorHKEY_CURRENT_USER\Software\Classes\*\shell
if you are a normal user
In all cases:
- add a new key under
shell
, naming it as you want to name the context menu item - add a new key inside this key, named
command
(mandatory name) - edit the
default
property incommand
tomyprogrampath\path\path\executable.exe "%1"
to pass the file path and name of the selected file to your custom program (for.../Directory/Background
and.../directory/Background
cases use%V
instead of%1
)
More customization:
- Add icon: add a string value named
icon
for key created at step 1 with value matching an icon resource path. You can also provide an integer arguments to specify which icon to use. Example:%SystemRoot%\System32\shell32.dll,3
- Display only on shift-click: add an empty string value named
Extended
for key created at step 1 - Customize menu entry label: change the value of default value for key created at step 1
- Change menu entry location: add a string value named
Position
with one of:Top
,Bottom
Solution 2 - Contextmenu
Found a cleaner, easier and faster solution: create a text file, fill it with these contents, update it to your needs, save with .reg suffix and launch it (it does not need administrator priviliges because it accesses user-part of the registry):
Windows Registry Editor Version 5.00
; Setup context menu item for click on right panel:
[HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground\command]
@="C:\\yourpath\\executable.exe \"%1\""
; Optional: specify an icon for the item:
; HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground]
;"icon"="C:\\yourpath\\appicon.ico"
; Optional: specify a position in the menu
; HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground]
;"position"="Bottom"
; -------------------------------------------------------------------------------------
; Setup context menu item for click on folders tree item:
[HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel\command]
@="C:\\yourpath\\executable.exe \"%1\""
; Optional: specify an icon for the item:
; [HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel]
;"icon"="C:\\yourpath\\appicon.ico"
; Optional: specify a position in the menu
; [HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel]
;"position"="Top"
In this way you can also have a backup of your configuration: just save the .reg file in a safe place. If you manually edit the registry after launching the file, right-click and slect "export".
Beware of double backspaces in path: \\
Solution 3 - Contextmenu
I went back and also answered this in another topic since there doesn't appear to be much on this question specifically.
I found the simplest way was to add a String Value to the key called "AppliesTo" and set its value to "under:{path}"
In my example, I want it to only look in the T Drive, so my String value is "AppliesTo":"under:T:".
In C#, this is easily accomplished with the following:
RegistryKey _key = Registry.ClassesRoot.OpenSubKey("Folder\\Shell", true);
RegistryKey newkey = _key.CreateSubKey("My Menu Item");
newkey.SetValue("AppliesTo", "under:T:");
RegistryKey subNewkey = newkey.CreateSubKey("Command");
subNewkey.SetValue("", "C:\\yourApplication.exe");
subNewkey.Close();
newkey.Close();
_key.Close();
Solution 4 - Contextmenu
The only good solution I found a really working is : https://superuser.com/questions/1097054/shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other
Add keys in HKEY_CLASSES_ROOT\SystemFileAssociations\your.extension\shell\command Modify the last key with the command you wanna do.
For my purpose it was :
"C:\Program Files (x86)\GPSBabel\gpsbabel.exe" -r -i gpx -f "%1" -x simplify,count=1000 -o gpx -F "%1.gpx"
If I export the it I get a .reg :
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\SystemFileAssociations\.gpx\shell\Simplify gpx\command]
@="\"C:\\Program Files (x86)\\GPSBabel\\gpsbabel.exe\" -r -i gpx -f \"%1\" -x simplify,count=1000 -o gpx -F \"%1.gpx\""
Solution 5 - Contextmenu
Open command prompt [run as administrator] and execute this command
reg add "HKEY_CLASSES_ROOT\Directory\shell\Refi2\command" /d "powershell.exe -noexit -command Set-Location -literalPath '%V'"
- -d : value to execute[app name exe].
- -v : creates a new subkey inside the command key.
- -f : to forcefully override the key if already exists.
- powershell.exe -noexit -command Set-Location -literalPath '%V' instead of this you can specify path of your exe.
For more details about more features run:-
reg add /?