使用SharpShell设计Windows资源管理器扩展

本文档详细介绍了如何使用SharpShell库在Windows环境中开发和安装自定义的Windows资源管理器外壳扩展,包括代码库的设置、注册和注销程序集、设计上下文菜单扩展等步骤。开发者需要具备.NETFramework和COM的知识,通过VisualStudio进行调试。最终目标是在上下文菜单中添加一个用于复制文件的选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

介绍

目的

范围

先决条件

我们正在努力实现的目标

代码和环境设置

代码库

ShellExView

服务器管理器

设计自定义窗口资源管理器上下文菜单扩展

添加SharpShell Nuget包

代码说明

为您的项目强签名

编译项目以进行调试

注册和注销程序集

验证程序集是否已注册

测试Windows资源管理器外壳扩展

Visual Studio中的调试Shell扩展


介绍

本文档提供了有关如何在Windows环境中实现Windows资源管理器外壳扩展的详细概述。它涉及开发和安装实践。

目的

本文档提供了有关如何将自己的自定义扩展集成到您自己的Windows环境中的全面技术概述——涉及哪些组件以及它们如何相互关联。

范围

本文档的范围是传达使用SharpShell程序集生成Windows扩展所需的概念。

先决条件

  • 对OOD(尤其是继承)有很好的理解
  • 对.NET Framework(4.0+)有很好的理解
  • 有关如何注册程序集的知识
  • 有关使用Visual Studio的知识
  • 了解Microsoft COM

我们正在努力实现的目标

您可以在Windows资源管理器中文件的上下文菜单中看到一个名为重复文件的新(自定义)菜单选项。此选项将复制所选文件,因此您不必复制和粘贴。

代码和环境设置

代码库

使用此链接克隆代码存储库 GitHub - Bert0Neill/Extensions

ShellExView

导航到以下位置,下载并解压ShellExView缩应用程序。解压缩后,您只需运行可执行文件 shexview.exe。这将加载所有已注册的程序集(在本地环境中)。

您可以使用此应用程序(刷新后)查找新创建的程序集,并验证它是否已正确注册。

服务器管理器

导航到以下位置,下载并解压缩ServerManager.zip文件(采用最新版本):

服务器管理器对于从GUI角度安装/卸载Windows资源管理器命令行管理程序扩展非常有用,此外,你可以轻松查看它是x64还是x86程序集以及它在哪里安装了扩展。

设计自定义窗口资源管理器上下文菜单扩展

Visual Studio中加载项目(上面的链接),在开发自己的扩展时,可以将其用作指南。

  • 创建一个空解决方案,并向其中添加新的类库项目(面向.NET 4.8框架)。
  • 重命名默认 Class.cs 文件以反映新扩展的功能。

就我而言,我将使用Windows资源管理器的上下文菜单创建一个将复制文件的扩展名。

我添加了一个资源文件来保存我希望在UI中呈现的任何字符串和图标:

将以下引用添加到Class项目中:

  • System.Windows.Forms
  • System.Drawing

System.Windows.Forms是必需的,因为我们将使用WinForms ContextMenuStrip来定义上下文菜单。

System.Drawing是必需的,因为我们想要使用图标。

添加SharpShell Nuget

 SharpShell Nuget包添加到类库项目中。这个组件为我们做了很多管道,你可以创建更多,而不仅仅是使用这个包的ContextMenu选项。

查看SharpShell Git Hub站点和特定ContextMenu链接,了解扩展还可以执行哪些操作。

代码说明

在第12,您将继承SharpContextMenu abstract类并覆盖ContextMenuStrip函数(第31行)和CanShowMenu函数(第20行)。

CanShowMenu函数中,您可以将自定义逻辑放置到是否要显示菜单选项(例如,您可能不希望复制大文件或某个用户创建的文件)

SharpContextMenu函数内的45,您连接菜单选项的单击事件操作,在本例中,该操作调用我们的自定义函数以复制文件。

另请注意,在第 11,我已将association属性设置为所有文件,因为我希望复制所有文件类型(不是文件夹等)——但您可以将其限制为.txt.docx文件扩展名。

在第10,我们告诉编译器使此类对COM注册表可见。

DuplicateFiles函数中要注意的一件事是public SelectedItemPaths IEnumerable<string>属性(第70行),它将保存所有选定的文件对象。

为您的项目强签名

在注册程序集之前,必须通过为程序集创建唯一标识来强类型化程序集,并且可以防止程序集冲突。

打开项目的属性窗格,选择签名,然后从选择字符串名称下拉列表中选择新建

输入密钥名称(可以是任何内容),在此示例中,我没有选择使用密码,但如果在网络域中注册扩展,则应对其进行密码保护。

下面,您可以看到我称我的密钥名称为 SignedKey

编译项目以进行调试

当你对代码感到满意并添加了强类型键时,就可以编译和测试扩展了——在调试模式下执行此操作。

注册和注销程序集

打开服务器管理器并选择加载服务器选项。导航到调试文件夹并加载新编译的shell扩展。

要注册\注销程序集(Shell扩展),只需在主窗口窗格中单击上传的文件,然后选择服务器菜单选项并选择安装卸载

注意:在安装或卸载程序集之前,必须在窗口窗格中选择文件。

您将收到一个提示,指示您的程序集已成功注册\未注册。

如果现在在窗口窗格中单击shell扩展文件,您将看到有关安装位置和版本的更多信息,当您取消注册时,这些字段将被重置。

要卸载您的shell扩展(以便您可以修改代码并重新测试),只需单击卸载选项(再次,如果您单击程序集,您会注意到安装文件夹已被重置)。

验证程序集是否已注册

如果要查看有关已注册程序集的详细信息,请打开ShellExView应用程序(如果已打开,则刷新),然后搜索新添加的扩展。如果它不存在,则它没有正确注册。

注意:您会注意到某些行是红色的,这是因为它们不是Microsoft开发的程序集(因此您的自定义程序集也将显示为红色)。

测试Windows资源管理器外壳扩展

安装扩展(通过服务器管理器)后,打开Windows资源管理器并右键单击文件,这将显示上下文菜单,你现在应该看到你的自定义扩展。

如果单击复制文件上下文菜单选项,将创建一个新文件。显示提示只是为了完整性(在实时版本中不是必需的)。

readme.txt 文件已多次复制(注意不要重复文件名)。

Visual Studio中的调试Shell扩展

  • 打开Windows资源管理器(您将使用它进行测试)。
  • 在Visual Studio中,将项目附加到资源管理器进程。
  • 在代码中要调试的部分放置断点。

Windows资源管理器中,右键单击文件并选择上下文菜单选项复制文件,这将触发调试器以命中断点。

https://www.codeproject.com/Articles/5353060/Design-a-Windows-Explorer-Extension-with-SharpShel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值