如何在Windows资源管理器中为文件夹添加右键菜单项

155

我已经找到了如何在Windows资源管理器中为文件添加右键上下文菜单项的方法,通过向注册表添加键。也就是说,我可以右键单击资源管理器中的文件并对该文件运行自定义应用程序。

我希望也能够为文件夹做同样的事情,但我还没有找到这样的方法(目前)。我看到有关创建/编写自定义上下文菜单处理程序的文章,但我宁愿不去那里。

我在这里找到了一篇文章,介绍了如何向桌面和资源管理器中的“计算机”添加级联上下文菜单项,但这对任何文件夹都不起作用。

我想能够将我的自定义应用程序添加到上下文菜单中,并使其适用于文件和文件夹。是否有一种不需要编写上下文菜单处理程序的方法来实现这一点?


我在下面的文章中找到了解决方案,它描述了如何通过注册表来为文件和文件夹添加此功能: 以下两篇文章提供了额外的信息和选项:
5个回答

308
在注册表编辑器(regedit.exe)中找到:
右键单击右侧面板的背景
1. 如果您是管理员,请找到HKEY_CLASSES_ROOT\Directory\Background\shell 2. 如果您是普通用户,请找到HKEY_CURRENT_USER\Software\Classes\directory\Background\shell
在Windows资源管理器的左/右面板中,右键单击文件夹图标
1. 如果您是管理员,请找到HKEY_CLASSES_ROOT\Directory\shell 2. 如果您是普通用户,请找到HKEY_CURRENT_USER\Software\Classes\directory\shell
右键单击文件
1. 如果您是管理员,请找到HKEY_CLASSES_ROOT\*\shell 2. 如果您是普通用户,请找到HKEY_CURRENT_USER\Software\Classes\*\shell

screenshots

在所有情况下:
1. 在 `shell` 下添加一个新的键,将其命名为你想要命名的上下文菜单项。 2. 在这个键下添加一个名为 `command` 的新键(必须名称)。 3. 编辑 `command` 中的 `default` 属性为 `myprogrampath\path\path\executable.exe "%1"`,以将所选文件的路径和名称传递给你的自定义程序(对于 `.../Directory/Background` 和 `.../directory/Background` 情况,请使用 `%V` 替代 `%1`)。

更多自定义:

  • 添加图标:为在步骤1创建的键添加一个名为icon的字符串值,其值与图标资源路径匹配。您还可以提供一个整数参数来指定要使用的图标。示例:%SystemRoot%\System32\shell32.dll,3
  • 仅在按住Shift键并单击时显示:为在步骤1创建的键添加一个名为Extended的空字符串值
  • 自定义菜单项标签:更改在步骤1创建的键的默认值
  • 更改菜单项位置:为在Position中添加一个名为Position的字符串值,可选值为:TopBottom

6
“HKEY_CLASSES_ROOT\Directory\Background\shell” 只能影响右键单击文件夹背景时的操作。 - Amos
28
如果路径中含有空格,应该为 "%1" - H.v.M.
7
立即生效,甚至无需打开新的浏览器窗口:只要右键单击,新设置就会加载。 - jumpjack
1
当我添加了“%1”时,我会收到一个错误对话框,“此文件没有与之关联的程序执行此操作。请安装一个程序或者如果已经安装,则在默认程序控制面板中创建一个关联。”删除“%1”会消除错误对话框并启动我的应用程序,但不会传递任何参数给我的应用程序。有什么建议吗? - Michael Herrmann
17
关于我之前的评论:将“%1”替换为“%V”可以解决这个问题。 - Michael Herrmann
显示剩余19条评论

17

发现一个更简单、更快的解决方案:创建一个文本文件,填入以下内容,根据您的需要进行更新,以.reg后缀保存并启动它(因为它访问注册表的用户部分,所以不需要管理员权限):

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"

这样做,您也可以备份配置:只需将.reg文件保存在安全的位置。如果启动文件后手动编辑注册表,请右键单击并选择“导出”。

注意路径中的双反斜杠:\\


我们要替换哪一部分?只是 MenuItemName 还是 MenuItemNameBackground - drzaus
1
%1 只适用于我的 Windows 10 左侧面板,对于右侧面板,我使用 %V。 - Bochen Lin

11

我回去并在另一个主题中回答了这个问题,因为似乎没有太多关于这个问题的特定解释。

我发现最简单的方法是将一个字符串值添加到名为“AppliesTo”的键中,并将其值设置为“under:{path}”。

例如,在我的示例中,我只想查找T驱动器中的内容,所以我的字符串值为“AppliesTo”:“under:T:”。

在C#中,可以使用以下代码轻松实现:

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();

2
感谢提供使用C#进行此操作的示例代码。这对于任何想要从应用程序快速完成此操作的人来说都是一个小帮助。 - Ayo I
2
很遗憾,“AppliesTo”值似乎对“Directory\Background”条目没有任何影响。有人知道如何在右键单击文件夹背景时实现类似的限制吗? - cl0rkster

5
我找到的唯一有效的解决方案是:在HKEY_CLASSES_ROOT\SystemFileAssociations\your.extension\shell\command中添加键,并修改最后一个键为你想要执行的命令。这个链接提供了更详细的步骤:https://superuser.com/questions/1097054/shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other
对于我的目的,我执行的命令是:
"C:\Program Files (x86)\GPSBabel\gpsbabel.exe" -r -i gpx -f "%1" -x simplify,count=1000 -o gpx -F "%1.gpx"

如果我导出它,我会得到一个 .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\""

1

打开命令提示符[以管理员身份运行],并执行以下命令

reg add "HKEY_CLASSES_ROOT\Directory\shell\Refi2\command" /d "powershell.exe -noexit -command Set-Location -literalPath '%V'"
  • -d:执行[应用程序名称exe]的值。
  • -v:在命令键内创建新的子键。
  • -f:如果已存在,则强制覆盖该键。
  • powershell.exe -noexit -command Set-Location -literalPath '%V',您可以指定您的exe路径。

有关更多功能的详细信息,请运行:

reg add /?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接