c# 添加指定扩展名的系统右键菜单(Windows11以前)
在上篇文章c# 添加系统右键菜单(Windows11以前)中我们说了怎么在文件夹上增加一个菜单项,但是我们可能还需要给某个单独的扩展名添加右键菜单。
这里我们不用常见的扩展名来做,我们新做一个.jx的扩展名,用我们自己的程序打开它。
首先我们要在注册表中注册我们的扩展名,我们可以打开regedit看一下,在HKEY_CLASSES_ROOT下面有我们所有已经注册过的扩展名,我们需要在这里面注册我们的.jx。
直接上代码
RegistryKey jx = Registry.ClassesRoot.OpenSubKey(".jx", true) ?? Registry.ClassesRoot.CreateSubKey(".jx");
这样我们就注册上了我们的扩展名。
然后这个扩展名如何实现打开呢?我们需要把这个项的默认数据指向另一个目录。
例如这里我们的目录就叫jxfile。
jx.SetValue("", "jxfile");
这样我们就告诉windows,要去HKEY_CLASSES_ROOT\jxfile这里面找处理程序。
然后我们需要的处理就跟文件夹的处理一样了,只不过文件夹我们是操作directory这个目录,我们自己的文件名是操作jxfile这个目录。所以代码可以稍微修改就拿过来。
RegistryKey jxfile = Registry.ClassesRoot.OpenSubKey("jxfile", true) ?? Registry.ClassesRoot.CreateSubKey("jxfile");
RegistryKey shell = jxfile.OpenSubKey("shell", true);
if (shell == null) shell = Registry.ClassesRoot.OpenSubKey("jxfile", true).CreateSubKey("shell");
RegistryKey custome = shell.CreateSubKey(你的键名称);
custome.SetValue("", 你的菜单名称);
RegistryKey cmd = custome.CreateSubKey("command");
cmd.SetValue("", Application.ExecutablePath + " %1");
cmd.Close();
custome.Close();
shell.Close();
}
MessageBox.Show("注册成功!", "提示");
这里需要注意的是之前我们的diretory目录是必定存在的,但是jxfile不一定,所以我们要先判断一下,不存在我们就建立一下。
这里需要注意一个问题,就是我们如果修改了处理程序,就有可能导致原来的默认处理程序不好用,不是单纯的增加我们的处理,而是用我们的处理程序替换了旧的处理程序。
这个问题怎么解决呢,其实我们可以先查一下对应的扩展名是否有处理程序了,如果有,我们就在之前的处理程序里新建我们的条目。
RegistryKey jx = Registry.ClassesRoot.OpenSubKey(".jx", true) ?? Registry.ClassesRoot.CreateSubKey(".jx");
var value = jx.GetValue("");
if (value == null) {
value = "jxfile";
jx.SetValue(value);
}
这里的value是object,我们可以直接转成string。
然后我们修改一下我们的查找方式
RegistryKey jxfile = Registry.ClassesRoot.OpenSubKey(value.ToString(), true) ?? Registry.ClassesRoot.CreateSubKey(value.ToString());
我们就可以把我们的处理程序附加到原来的处理程序里面了。
c# 添加指定扩展名的系统右键菜单(Windows11以前)的更多相关文章
- 添加系统右键菜单项 管理员取得所有权(W)(带盾牌)
@color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKC ...
- 系统右键菜单添加剪贴板清空项(隐藏DOS窗口)
@color 0A @title 系统右键菜单添加剪贴板清空项(隐藏DOS窗口) by wjshan0808 @echo off echo 请输入右键菜单名称 set /p name= ::创建本机A ...
- java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中
/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. * * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件 ...
- 在 IIS MIME 类型中添加 md 扩展名
最近在了解 Knowledge Base (知识库)的内容,对两个平台比较感兴趣,一个是 Raneto,一个是 MDwiki,两者都是使用md文件作为内容存储. 需要注意的是,使用IIS部署网站后,需 ...
- 添加删除系统右键菜单(就是上下文菜单,也就是Context Menu)中的一些选项
随着电脑安装的东西越来越多,右侧菜单也原来越长,很不方面.所以打算清理一下 我删除的大约以下几个,友好一点的都可以配置.当然也可以通过注册表直接删除. 特:注册表备份,即导入导出,避免一失足成千古恨. ...
- 如何定制Windows系统右键菜单
今天心血来潮把几个自己常用的工具定制到了系统的右键菜单.包括notepad++,7zip,还有复制文件全路径和文件夹路径.下面简单介绍一下步骤. 1. Windows系统右键菜单对应的注册表位置 Wi ...
- 修复sublime text系统右键菜单
修复sublime text系统右键菜单 安装完Sublime Text2后,拿掉电脑里面的备用硬盘,导致每次使用Open with Sublime Text2的时候,都会出错,打开注册表,找到 HK ...
- 『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件
004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件 导航栏 插件扩展 比如下图的 窗口 > 关闭所有文档 这个导航栏: 在 任何程序集,任何命名空间,任 ...
- [内核驱动] VS2012+WDK 8.0 Minifilter实现指定扩展名文件拒绝访问
转载:http://blog.csdn.net/C0ldstudy/article/details/51585708 转载:http://blog.csdn.net/zj510/article/det ...
随机推荐
- Linux 运维请务必收藏~ Nginx 五大常见应用场景
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Nginx 是一个很强大的高性能 Web 和反向代理服务,它具有很多非常优越的特性,在连接高并 ...
- 离谱的 CSS!从表盘刻度到艺术剪纸
某日,群里有这样一个问题,如何实现这样的表盘刻度: 这其实是个挺有意思的问题,方法也有很多. 单标签,使用 conic-gradient 实现表盘刻度 最简单便捷的方式,就是利用角向渐变的方式 con ...
- C# .NET ML.NET 机器学习 图像分类
一. 准备工作 IDE是 VS2019.先下载好"resnet_v2_50_299.meta"这个文件,放入"C:\Users\jk\AppData\Local\Temp ...
- Linux篇-mysql + keepalived高可用
1上次说过了mysql的主从配置 tar zxf keepalived-1.2.7.tar.gz cd keepalived-1.2.7 yum install gcc gcc-c++ yum ins ...
- js算法-计算素数暴力算法
- C++:接送旅客
接送旅客 时间限制:1.00sec 内存限制:128MB 题目描述: 现在,你是一家酒店的员工,你需要帮助这家酒店的旅客运送行李离开酒店.现在,你送顶层开始往下移动,为了减少电梯移动的距 ...
- uniapp项目vue2升级vue3简单记录
看到好多开源项目都升级了vue3,看文章说vue3性能升级很多,而且组合式api很香,遂把最近开发的自助洗车app升级下,在此记录下出现的问题. uniapp升级vue3官方指南 我是先去vue官网看 ...
- Linux(Centos7)静默安装Oracle19C
Oracle数据库服务器一般都是Linux,Linux服务器一般都是在非图形界面的操作,本文章手把手教你如何在非图形界面安装Oracle19C. ORACLE 19C 的安装包自行在官网下载,下载免费 ...
- Jenkins之配置GitHub-Webhook
前提条件1: 运行Jenkins的机器需要安装git,并且git.exe文件在系统的环境变量里面,或者手动在 Manage Jenkins -> Global Tool Configuratio ...
- 【高并发】通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程
核心逻辑概述 ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态. ThreadPoolExecu ...