windows右键菜单扩展
今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下:
如上图,右键菜单多了几个我自定义的菜单
复制文件路径 复制文件夹路径 我的工具箱 <走配置文件动态创建子菜单,下面会讲>
我上图是在win10操作系统下演示的,在win11系统也测试可用。
源码和工具包已经开源在github https://github.com/yuzd/WindowsExplorerExtensions
欢迎star,如果github访问慢,可以公众号内回复 菜单扩展 会提供你baidu网盘的下载包
如何安装
软件包下载后,解压后
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注册进去后,菜单点击的时候会进入断点
关于我
微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项。27年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。
MVP是经过严格挑选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的热情并乐于助人的专家。MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人,并最大程度地帮助微软技术社区用户使用Microsoft技术。
更多详情请登录官方网站https://mvp.microsoft.com/zh-cn
windows右键菜单扩展的更多相关文章
- 在windows右键菜单中加入自己的程序 [转载]
原文链接: http://blog.csdn.net/marklr/article/details/4006356 在windows右键菜单中加入自己的程序 标签: windowsattribute ...
- Windows右键菜单设置与应用技巧
http://blog.163.com/lee_honleon/blog/static/555251522008014258896/ 需要修改注册表,挺麻烦的.最好还是把迅雷卸了重装,不会影响什么 ...
- windows右键菜单自动打包发布nuget,没有CI/CD一样方便!
构建现代的 .Net 应用离不开 Nuget 的支持,而快速打包 Nuget 成了提高生产率的有效方法.没有CI/CD?来试试使用windows右键菜单吧 先看右键效果图 有时候我们可能没有CI/CD ...
- 为vscode开发一款svn右键菜单扩展
在我平时的工作中会经常用到svn blame这个命令,但是vscode现有的svn扩展普遍都不能自定义右键菜单. 所以我产生一个想法:自己动手为vscode开发一款svn的扩展来定制右键菜单,本文记录 ...
- 自己写一个chrome扩展程序 - 右键菜单扩展
最近在学习Spring,心想dotnet如何实现类似形式呢.于是想认真学习Casetle组件,发现没有书籍!而spring的书多得很.于是只好找网上教程了.发现系统的文章不多.Terrylee好多文章 ...
- [原创] Delphi小工具(Windows资源管理器右键菜单扩展)
两个小工具 1. 项目临时文件清理 2. Android Ndk 编译 c/c++ jni 源码工具. 下载后,点击Reg.bat就可以完成注册安装.不需要时点击 UnReg.Bat 就可以删除菜单. ...
- Windows右键菜单中新建项目添加与删除
一种是如 txt 类型: HKEY_CLASSES_ROOT\.txt\ShellNew 项下空字符串值:NullFile 另一种如MsOffice类型: HKEY_CLASSES_ROOT\.xl ...
- 如何定制Windows系统右键菜单
今天心血来潮把几个自己常用的工具定制到了系统的右键菜单.包括notepad++,7zip,还有复制文件全路径和文件夹路径.下面简单介绍一下步骤. 1. Windows系统右键菜单对应的注册表位置 Wi ...
- (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单
原文 (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windo ...
- [翻译].NET Shell Extensions - Shell Context Menus---.net 外壳扩展-右键菜单
我自己的前言说明: 本文原作者为 Dave Kerr,原文链接为.NET Shell Extensions - Shell Context Menus:,我是在为了完成最新需求的时候查询资料的时 ...
随机推荐
- 无线adb连接
使用USB数据线连接Android设备; 在dos命令行输入adb tcpip [xxxx]命令 (例如:adb tcpip 8888,xxx代表端口号); 断开USB数据线(数据线和设备断开连接 ...
- SQLSever事务
1. 为什么要使用事务? 当一个存储过程或多个SQL语句(指代insert.update.delete类型)依次执行时候, 如果其中一条或几条发生错误,但是其他的还会继续执行,会造成数据的不一致,非常 ...
- 2022-11-01 Acwing每日一题
第k个数 给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数. 输入格式 第一行包含两个整数 n 和 k. 第二行包含 n 个整数(所有整数均在 1 ...
- 【DL论文精读笔记】 深度压缩
深度压缩 DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFM ...
- oracle第二步创建表空间、用户、授权
Windows+r→键入sqlplus,输入已安装好的oracle数据库超级管理员账号密码登录.显示: 成功. 创建表空间: 创建用户并默认表空间: 授权该创建用户对数据库的操作: 代码: SQL&g ...
- JS基础笔记合集(1-3)
JavaScript合集 1. JS入门基础 2. JS数据类型 3. JS运算符 4. JS流程控制 5. JS对象 6. JS函数 7. JS面向对象 8. JS数组 9. JS内置对象 我追求理 ...
- Nginx 安装篇-yum安装
yum安装教程引用: https://www.cnblogs.com/AprilBlank/p/11388990.html#1-yum安装推荐 避坑事项: 暂无
- 单一接口优化过程全记录(主要涉及Redis)
接口优化过程记录 问题背景 某个接口耗时长(247ms),但里面逻辑不算复杂,只进行了简单的对象引用以及操作了多次Redis 步骤1:链路追踪,确定业务耗时点 接口里通过链路追踪以及日志查询发现主要是 ...
- python模块/导入模块
索引取值与迭代取值的差异 l1 = [1,2,3,4,5] 1.索引取值 可以任意位置任意次数的取值 不支持无序类型的数据取值 print(l1[3]) print(l1[3]) #可以直接获取任意位 ...
- 【机器学习】李宏毅——Anomaly Detection(异常检测)
异常检测概述 首先要明确一下什么是异常检测任务.对于异常检测任务来说,我们希望能够通过现有的样本来训练一个架构,它能够根据输入与现有样本之间是否足够相似,来告诉我们这个输入是否是异常的,例如下图: 那 ...