如何在Delphi中将项目添加到Windows资源管理器内容菜单?

6
我想在Windows资源管理器内容菜单(适用于所有文件类型)中创建菜单项,点击后将打开我的应用程序并将所选文件名传递给它。是否有此方面的教程?我知道有可用的ShellPlus组件,但它有点过时。
3个回答

8

注册表

这种方法很容易,只需添加一些注册表键即可。缺点是您不能在其中放置任何逻辑。您可以在此处阅读相关内容,在Delphi中此处有一个简单的示例。如果您使用DDE执行菜单项,则可以获得更多控制。请参见此处,其中有一个Delphi示例。

Shell扩展

这种方法需要更多的工作,但您可以完全通过代码控制上下文菜单。您需要编写一个DLL,实现IContextMenu(或其他接口),并将DLL注册到Windows资源管理器中。您可以在此处了解更多信息。您已经提到了Shell+


2
+1,建议使用Shell扩展,但请注意,由于我们无法在Delphi中创建x64 DLL(尚未),因此它仅适用于支持Shell扩展的x86资源管理器和x86应用程序(在x86和x64 Windows上)。 - Remko
1
delphi3000的链接已经失效了,而且在wayback机器中也找不到,有人可以分享使用注册表的代码吗?我正在研究如何注册任意(*)文件类,但是找不到方法(MS对我来说不太清楚:() - TheDude

3

Delphi包含一个用于Shell扩展的演示项目。请查看 Demos\ActiveX\ShellExt 文件夹。


Rob,11年过去了,我对这个主题很感兴趣。我想编写一个内容菜单编辑器,但我找不到一个应用程序来删除无效的上下文菜单项,所以我可能会编写它,并加入一些其他功能。但是,在第一次搜索中,所有解决方案(包括您的)都建议使用ActiveX。有没有办法在没有ActiveX的情况下处理它?还有关于(Windows资源管理器)上下文菜单的任何阅读链接吗? - Mawg says reinstate Monica
1
有两种上下文菜单项。其中一种,您只需提供应显示的文本和用户选择菜单项时资源管理器应运行的命令行。在另一种情况下,您指定一个DLL,资源管理器将加载该DLL以提供一个或多个菜单项。ActiveX只是COM,而COM本质上是Windows插件系统。您无法编写后一种样式的上下文菜单项而不使用COM。但是您不需要那个。您只需要清除已卸载程序留下的过时注册表条目即可。 - Rob Kennedy

1

无论使用哪种编程语言,都可以通过在注册表中设置所需文件类型的快捷菜单处理程序来实现。在那里,您可以使用正确的路径、正确的选项和正确的文件占位符调用您的应用程序。

有关更详细的信息,请参阅MSDN文章Creating Shortcut Menu Handlers


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