在上篇文章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以前)的更多相关文章

  1. 添加系统右键菜单项 管理员取得所有权(W)(带盾牌)

    @color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKC ...

  2. 系统右键菜单添加剪贴板清空项(隐藏DOS窗口)

    @color 0A @title 系统右键菜单添加剪贴板清空项(隐藏DOS窗口) by wjshan0808 @echo off echo 请输入右键菜单名称 set /p name= ::创建本机A ...

  3. java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

    /** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件 ...

  4. 在 IIS MIME 类型中添加 md 扩展名

    最近在了解 Knowledge Base (知识库)的内容,对两个平台比较感兴趣,一个是 Raneto,一个是 MDwiki,两者都是使用md文件作为内容存储. 需要注意的是,使用IIS部署网站后,需 ...

  5. 添加删除系统右键菜单(就是上下文菜单,也就是Context Menu)中的一些选项

    随着电脑安装的东西越来越多,右侧菜单也原来越长,很不方面.所以打算清理一下 我删除的大约以下几个,友好一点的都可以配置.当然也可以通过注册表直接删除. 特:注册表备份,即导入导出,避免一失足成千古恨. ...

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

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

  7. 修复sublime text系统右键菜单

    修复sublime text系统右键菜单 安装完Sublime Text2后,拿掉电脑里面的备用硬盘,导致每次使用Open with Sublime Text2的时候,都会出错,打开注册表,找到 HK ...

  8. 『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件

    004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件 导航栏 插件扩展 比如下图的    窗口 > 关闭所有文档    这个导航栏: 在 任何程序集,任何命名空间,任 ...

  9. [内核驱动] VS2012+WDK 8.0 Minifilter实现指定扩展名文件拒绝访问

    转载:http://blog.csdn.net/C0ldstudy/article/details/51585708 转载:http://blog.csdn.net/zj510/article/det ...

随机推荐

  1. Linux 运维请务必收藏~ Nginx 五大常见应用场景

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Nginx 是一个很强大的高性能 Web 和反向代理服务,它具有很多非常优越的特性,在连接高并 ...

  2. 离谱的 CSS!从表盘刻度到艺术剪纸

    某日,群里有这样一个问题,如何实现这样的表盘刻度: 这其实是个挺有意思的问题,方法也有很多. 单标签,使用 conic-gradient 实现表盘刻度 最简单便捷的方式,就是利用角向渐变的方式 con ...

  3. C# .NET ML.NET 机器学习 图像分类

    一. 准备工作 IDE是 VS2019.先下载好"resnet_v2_50_299.meta"这个文件,放入"C:\Users\jk\AppData\Local\Temp ...

  4. 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 ...

  5. js算法-计算素数暴力算法

  6. C++:接送旅客

    接送旅客 时间限制:1.00sec        内存限制:128MB 题目描述: 现在,你是一家酒店的员工,你需要帮助这家酒店的旅客运送行李离开酒店.现在,你送顶层开始往下移动,为了减少电梯移动的距 ...

  7. uniapp项目vue2升级vue3简单记录

    看到好多开源项目都升级了vue3,看文章说vue3性能升级很多,而且组合式api很香,遂把最近开发的自助洗车app升级下,在此记录下出现的问题. uniapp升级vue3官方指南 我是先去vue官网看 ...

  8. Linux(Centos7)静默安装Oracle19C

    Oracle数据库服务器一般都是Linux,Linux服务器一般都是在非图形界面的操作,本文章手把手教你如何在非图形界面安装Oracle19C. ORACLE 19C 的安装包自行在官网下载,下载免费 ...

  9. Jenkins之配置GitHub-Webhook

    前提条件1: 运行Jenkins的机器需要安装git,并且git.exe文件在系统的环境变量里面,或者手动在 Manage Jenkins -> Global Tool Configuratio ...

  10. 【高并发】通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程

    核心逻辑概述 ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态. ThreadPoolExecu ...