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

image

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

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

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

源码和工具包已经开源在github https://github.com/yuzd/WindowsExplorerExtensions

image

欢迎star,如果github访问慢,可以公众号内回复 菜单扩展 会提供你baidu网盘的下载包

如何安装

软件包下载后,解压后

image
  • 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方式打开,对于是大数字会显示成下面这样

image

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

image

开始安装

进入解压后的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个扩展菜单已经可用了

image

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

打开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}"

我们这么配置下:

image

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

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

image

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

源码说明

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

引入 ShapShell 包

image

image

示例代码


    [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)]不能漏

如何调试

image

image

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

image

关于我

image

微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项。27年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。

MVP是经过严格挑选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的热情并乐于助人的专家。MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人,并最大程度地帮助微软技术社区用户使用Microsoft技术。

更多详情请登录官方网站https://mvp.microsoft.com/zh-cn

windows右键菜单扩展的更多相关文章

  1. 在windows右键菜单中加入自己的程序 [转载]

    原文链接: http://blog.csdn.net/marklr/article/details/4006356  在windows右键菜单中加入自己的程序 标签: windowsattribute ...

  2. Windows右键菜单设置与应用技巧

    http://blog.163.com/lee_honleon/blog/static/555251522008014258896/   需要修改注册表,挺麻烦的.最好还是把迅雷卸了重装,不会影响什么 ...

  3. windows右键菜单自动打包发布nuget,没有CI/CD一样方便!

    构建现代的 .Net 应用离不开 Nuget 的支持,而快速打包 Nuget 成了提高生产率的有效方法.没有CI/CD?来试试使用windows右键菜单吧 先看右键效果图 有时候我们可能没有CI/CD ...

  4. 为vscode开发一款svn右键菜单扩展

    在我平时的工作中会经常用到svn blame这个命令,但是vscode现有的svn扩展普遍都不能自定义右键菜单. 所以我产生一个想法:自己动手为vscode开发一款svn的扩展来定制右键菜单,本文记录 ...

  5. 自己写一个chrome扩展程序 - 右键菜单扩展

    最近在学习Spring,心想dotnet如何实现类似形式呢.于是想认真学习Casetle组件,发现没有书籍!而spring的书多得很.于是只好找网上教程了.发现系统的文章不多.Terrylee好多文章 ...

  6. [原创] Delphi小工具(Windows资源管理器右键菜单扩展)

    两个小工具 1. 项目临时文件清理 2. Android Ndk 编译 c/c++ jni 源码工具. 下载后,点击Reg.bat就可以完成注册安装.不需要时点击 UnReg.Bat 就可以删除菜单. ...

  7. Windows右键菜单中新建项目添加与删除

    一种是如  txt 类型: HKEY_CLASSES_ROOT\.txt\ShellNew 项下空字符串值:NullFile 另一种如MsOffice类型: HKEY_CLASSES_ROOT\.xl ...

  8. 如何定制Windows系统右键菜单

    今天心血来潮把几个自己常用的工具定制到了系统的右键菜单.包括notepad++,7zip,还有复制文件全路径和文件夹路径.下面简单介绍一下步骤. 1. Windows系统右键菜单对应的注册表位置 Wi ...

  9. (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单

    原文 (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windo ...

  10. [翻译].NET Shell Extensions - Shell Context Menus---.net 外壳扩展-右键菜单

    我自己的前言说明: 本文原作者为    Dave Kerr,原文链接为.NET Shell Extensions - Shell Context Menus:,我是在为了完成最新需求的时候查询资料的时 ...

随机推荐

  1. v-for中key的作用与原理

    一.虚拟DOM中key的作用 key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据新数据生成新的虚拟DOM,随后Vue会对新虚拟DOM与旧虚拟DOM的差异进行比较. 二.如何选择key 最好使 ...

  2. 我要涨知识 —— TypeScript 常见面试题(一)

    1.ts 中的 any 和 unknown 有什么区别? unknown 和 any 的主要区别是 unknown 类型会更加严格:在对 unknown 类型的值执行大多数操作之前,我们必须进行某种形 ...

  3. 棋盘覆盖(java实现)

    棋盘覆盖 问题描述 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘 ...

  4. 2022春每日一题:Day 9

    题目:IncDec Sequence 思维题,差分好题,每次区间操作,对应差分a[l]+=v,a[r+1]-=v,在差分数组中一定有一个正负号抵消,那么我们求出差分数组中正数(负数)和,记做s1,s2 ...

  5. [排序算法] 快速排序 (C++) (含三种写法)

    快速排序解释 快速排序 Quick Sort 与归并排序一样,也是典型的分治法的应用. (如果有对 归并排序还不了解的童鞋,可以看看这里哟~ 归并排序) 快速排序的分治模式 1.选取基准值,获取划分位 ...

  6. sqlserver数据库还原

    这里是从A服务器备份的数据库文件,还原到本地B电脑的数据库.因数据库版本相同,故而未曾出现其他版本问题 1.有个bak的备份文件 2.在B电脑新建一个数据库test. 3.设置test数据库的访问限制 ...

  7. 【Advanced Installer】打包winfrom程序出现您没有任何数字签名的实用程序。请安装平台 SDK。错误

    出现这个问题的原因是设置了磁铁,此功能只会在win8.1上有效.也就是开始菜单里面的磁铁图 只需要把这个删除掉就可以解决了

  8. typora实现多平台发布文章

    源码下载 前言 之前写过一片文章,typora 使用CSDN作为图床,用来存储 markdown 文章的图片资源文件.后来发现 typora 还可以自定义导出命令,那么也可以利用这个功能实现直接发布到 ...

  9. java面试题-线程

    简述线程.程序.进程的基本概念.以及他们之间关系是什么? 系统运行程序到停止就是一个进程创建到消亡的过程,而线程则是进程的更小单位 线程有哪些基本状态? 初始,运行中,等待,阻塞,超时,终止1 关注公 ...

  10. STM32用PWM波控制呼吸灯代码

    pwm.c #include "pwm.h" //TIM3-CH3 //PB0 void PWM_Config(void) { GPIO_InitTypeDef GPIO_Init ...