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

目录

介绍

目的

范围

先决条件

我们正在努力实现的目标

代码和环境设置

代码库

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中的代码是一个C#的资源管理预览效果的示例。这段代码使用了Presentation库来预览PPT文件,并将其转换为HTML格式。具体的实现过程是通过实例化Presentation类,加载PPT文件,然后将其保存为HTML文件。最后返回HTML文件的地址。这段代码可以用于在C#应用程序中实现PPT文件的预览功能。 引用\[2\]提供了一个关于SharpShell的源码和例程的下载链接。SharpShell是一个用于创建Shell扩展的库,可以用于实现Windows资源管理器的预览处理程序。通过使用SharpShell,可以自定义资源文件的预览效果。 引用\[3\]提供了C++版和C#版的资源管理预览效果的参考链接。C++版的参考链接是关于如何构建缩略图提供程序的,而C#版的参考链接是一个示例项目,展示了如何使用SharpShell来创建自定义的资源预览扩展。这些参考链接可以帮助你更深入地了解如何实现资源管理预览效果。 综上所述,你可以使用C#和SharpShell来实现资源管理预览效果,并参考引用\[1\]中的代码来预览PPT文件。 #### 引用[.reference_title] - *1* [c#预览office文档最全面的例子](https://blog.csdn.net/qq_42638454/article/details/103577309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C#实现Windows资源管理器文件预览](https://blog.csdn.net/hey_zng/article/details/50925571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【C#在资源管理器中显示自定义文件格式的缩略图】](https://blog.csdn.net/weixin_44029053/article/details/127040937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值