当前位置: 首页 > news >正文

Windows 右键菜单扩展容器 [开源]

今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下:

如上图,右键菜单多了几个我自定义的菜单:

  • 复制文件路径

  • 复制文件夹路径

  • 我的工具箱 <走配置文件动态创建子菜单,下面会讲>

我上图是在 win10 操作系统下演示的,在 win11 系统也测试可用。

源码和工具包已经开源在 github

  • https://github.com/yuzd/WindowsExplorerExtensions

微软MVP实验室研究员

俞正东

微软最有价值专家(MVP),.NET 技术专家,热爱开源,关注并喜欢研究前沿技术,热衷于技术和经验分享,长期撰写技术博客,活跃于开源社区。

如何安装

软件包下载后,解压后:

  • windows-explorer-ext 目录是安装扩展文件用的

  • 30594988.csv 是测试 csv 转 excel 的 demo 文件

  • csv2xlsx.exe 是我开发的一个 netcore 独立打包的 csv 转 excel 的执行文件

csv2xlsx 的源码地址: 

  • https://github.com/yuzd/Exporter/tree/master/ConsoleApp

是基于我开源的各种类型转化封装库,比如 csv,xlsx,json,list 相互转化。

开源地址:

  • https://github.com/yuzd/Exporter

有人可能会问 ,如果电脑安装了 office 的话,直接 csv 就可以打开为 excel 啊, 但是默认的双击 csv 以 excel 方式打开,对于是大数字会显示成下面这样。

所以我想要让 csv 的内容全部以字符串类型展示(就是上面 csv3xlsx 的功能了)

开始安装

进入解压后的 windows-explorer-ext 目录

  • ServerManager.exe 安装扩展用的

  • menu.txt 动态菜单配置文件

  • WindowsExplorerExtentions.dll 扩展逻辑封装

▍首先打开 ServerManager.exe

这个工具你也可以从官方地址下载:

  • https://github.com/dwmkerr/sharpshell/releases

打开 ServerManager.exe 点击 Load Server 

然后选中当前目录的 WindowsExplorerExtentions.dll

选中第一个然后点击 Install 安装扩展

出现如下提示代表安装成功

此时,复制文件地址和复制文件夹地址这2个扩展菜单已经可用了

<我的工具箱>是动态创建二级子菜单的容器,需要配置下文件

▍打开 menu.txt 配置文件

总共要配置4个东西(按照-_-隔开)

  • [1] 针对什么后缀的文件进行 比如 .csv 代表只针对 csv 文件才会创建该菜单

  • [2] 菜单名称

  • [3] 这个菜单功能对应的可执行文件 这个根据功能自己开发了

  • [4] 传给上面可执行文件的参数 {path} 会动态替换为选择的文件地址全路径

注意,针对[1] 有2个特殊约定

如果配置 * 那么选择文件或者文件夹都会出现该菜单

*-_-测试-_-E:\xxxxx\xxxx.exe-_-"{path}"

如果配置 folder 那么只会选择文件夹才会出现该菜单

folder-_-测试-_-E:\xxxxx\xxxx.exe-_-"{path}"

这样一来的话,如果我后面想要动态创建菜单,只需要开发这个菜单功能的可执行文件,然后再 menu.txt 新增个配置就搞定了,是不是很方便。

上面说到下载包有个 csv2xlsx.exe 文件,下面我们配置下动态新增一个二级子菜单<转成excel> 只针对csv文件有效。

menu.txt 配置如下:

.csv-_-转成excel-_-E:\Tool\windows-extention\csv2xlsx.exe-_-"{path}"

我们这么配置下:

配置好后,在 csv 类型文件点击右键,就可以看到效果了。

点击该菜单,会启动一个 cmd 窗口,注意,在非 csv 的文件是不会有这个菜单的,这个是根据配置来的。

其实就是将选中的文件路径传给你配置的可执行文件去执行。

源码说明

打开 vs 创建一个空的 solution,新增一个新的 Class Library 工程(目标是 framework)。

引入 ShapShell 包:

示例代码​​​​​​​

[ComVisible(true)]//这个很关键[COMServerAssociation(AssociationType.AllFiles)] //这个代表针对文件类型才有效//[COMServerAssociation(AssociationType.AllFilesAndFolders)]这个代表针对全部类型有效,包括文件夹public class CopyFileLocationExt : SharpContextMenu{protected override bool CanShowMenu(){return true;}protected override ContextMenuStrip CreateMenu(){try{var contextMenu = new ContextMenuStrip();var menuItem = new ToolStripMenuItem("复制文件路径");menuItem.Image = Resources.AppStrings.Duplicate3;menuItem.Click += (sender, args) =>{var file = SelectedItemPaths.First();Clipboard.SetText(file);};contextMenu.Items.Add(menuItem);//  Return the menu.return contextMenu;}catch (Exception ex){MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);return null;}}}

主要依赖 ShapShell,创建 SharpContextMenu 的实现类,重写关键的 CanShowMenu 和 CreateMenu 的方法,注意 [ComVisible(true)] 不能漏。

▍如何调试

用 ServerManager.exe 注册进去后,菜单点击的时候会进入断点。

http://www.lryc.cn/news/24855.html

相关文章:

  • 爆文制造机!小红书热榜3个方向,告诉你选题诀窍!
  • 【Web安全社工篇】——水坑攻击
  • SpringBoot 整合 MongoDB 实现数据的增删改查!
  • VUE前端常问面试题
  • c++中map/unordered_map的不同遍历方式以及结构化绑定
  • Kafka系列之:Kraft模式
  • 动态规划:leetcode 139.单词拆分、多重背包问题
  • Stable Diffusion原理详解
  • webpack高级配置
  • jQuery 事件
  • 【批处理脚本】-2.3-解析地址命令arp
  • 改进 YOLO V5 的密集行人检测算法研究(论文研读)——目标检测
  • Python - Opencv应用实例之CT图像检测边缘和内部缺陷
  • 管理逻辑备数据库(Logical Standby Database)
  • 【C++】构造函数(初始化列表)、explicit、 Static成员、友元、内部类、匿名对象
  • (六十)再来看看几个最常见和最基本的索引使用规则
  • 机器学习与目标检测作业(数组相加:形状需要满足哪些条件)
  • CentOS救援模式(Rescue Mode)及紧急模式(Emergency Mode)
  • 从面试官角度告诉你高级性能测试工程师面试必问的十大问题
  • 通过知识库深度了解用户的心理
  • HiveSQL一天一个小技巧:如何将分组内数据填充完整?
  • 【亲测可用】BEV Fusion (MIT) 环境配置
  • 【调试方法】基于vs环境下的实用调试技巧
  • 单目标应用:蜣螂优化算法DBO优化RBF神经网络实现数据预测(提供MATLAB代码)
  • MTK平台开发入门到精通(Thermal篇)热管理介绍
  • 最好的 QML 教程,让你的代码飞起来!
  • 笔记(六)——stack容器的基础理论知识
  • Web前端学习:四 - 练习
  • odoo15 标题栏自定义
  • 视觉SLAM十四讲 ch3 (三维空间刚体运动)笔记