今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下: 如上图,右键菜单多了几个我自定义的菜单 我上图是在win10操作系统下演示的,在win11系统也测试可用。 源码和工具包已经开源在github https://github.com/yuzd/WindowsExplorerExtensions 欢迎star,如果github访问慢,可以公众号内回复 菜单扩展 会提供你baidu网盘的下载包 软件包下载后,解压后 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目录 这个工具你也可以从官方地址下载:https://github.com/dwmkerr/sharpshell/releases 打开ServerManager.exe 点击Load Server 然后选中当前目录的WindowsExplorerExtentions.dll 选中第一个然后点击Install安装扩展 出现如下提示代表安装成功 此时,复制文件地址和复制文件夹地址这2个扩展菜单已经可用了 <我的工具箱>是动态创建二级子菜单的容器,需要配置下文件 总共要配置4个东西(按照-_-隔开) 注意,针对[1] 有2个特殊约定 如果配置 * 那么选择文件或者文件夹都会出现该菜单 如果配置 folder 那么只会选择文件夹才会出现该菜单 这样一来的话,如果我后面想要动态创建菜单,只需要开发这个菜单功能的可执行文件,然后再menu.txt新增个配置就搞定了, 是不是很方便 上面说到下载包有个csv2xlsx.exe文件,下面我们配置下 动态新增一个二级子菜单<转成excel> 只针对csv文件有效 menu.txt配置如下: 我们这么配置下: 配置好后,在csv类型文件点击右键,就可以看到效果了 点击该菜单,会启动一个cmd窗口 注意,在非csv的文件是不会有这个菜单的,这个是根据配置来的 其实就是将选中的文件路径传给你配置的可执行文件去执行 打开vs创建一个空的solution,新增一个新的Class Library 工程(目标是framework) 引入 ShapShell 包 示例代码 主要依赖ShapShell,创建SharpContextMenu的实现类,重写关键的CanShowMenu和CreateMenu的方法 注意[ComVisible(true)]不能漏 用ServerManager.exe注册进去后,菜单点击的时候会进入断点 微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项。27年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。 MVP是经过严格挑选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的热情并乐于助人的专家。MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人,并最大程度地帮助微软技术社区用户使用Microsoft技术。 更多详情请登录官方网站https://mvp.microsoft.com/zh-cn
如何安装
开始安装
首先打开ServerManager.exe
打开menu.txt配置文件
*-_-测试-_-E:\xxxxx\xxxx.exe-_-"{path}"
folder-_-测试-_-E:\xxxxx\xxxx.exe-_-"{path}"
.csv-_-转成excel-_-E:\Tool\windows-extention\csv2xlsx.exe-_-"{path}"
源码说明
[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;
}
}
}
如何调试
关于我