在上篇文章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. 【计算机网络】Stanford CS144 Lab Assignments 学习笔记

    本文为我的斯坦福计算机网络课的编程实验(Lab Assignments)的学习总结.课程全称:CS 144: Introduction to Computer Networking. 事情发生于我读了 ...

  2. 团队Beta演示

    组长博客 本组(组名)所有成员 短学号 姓名 2236 王耀鑫(组长) 2210 陈超颖 2209 陈湘怡 2228 许培荣 2204 滕佳 2205 何佳琳 2237 沈梓耀 2233 陈志荣 22 ...

  3. 1.11 Linux的主要应用领域有哪些?

    与Windows操作系统软件一样,Linux 也是一个操作系统软件.但与Windows不同的是,Linux是一套开放源代码程序的,并可以自由传播的类UNIX操作系统软件,随着信息技术的更新变化,Lin ...

  4. spring 拦截器流程 HandlerInterceptor AsyncHandlerInterceptor HandlerInterceptorAdapter

    HandlerInterceptor源码 3种方法: preHandle:拦截于请求刚进入时,进行判断,需要boolean返回值,如果返回true将继续执行,如果返回false,将不进行执行.一般用于 ...

  5. 2021夏季学期华清大学EE数算OJ1:算数问题

    第一次写博客,有点紧张... 也许格式也没有特别丑吧 先看原题( 此题做法众多,这里仅仅介绍蒟蒻的一种很复杂的思路(但最后还是喜提0ms的好成绩) 读完这道题,不难发现,此题不过是一个质因数分解+一堆 ...

  6. VMWare中CentOS安装VM-Tools

    查看CD-ROM驱动器的设备信息 可以通过下面几个命令来查看 dmesg命令 dmesg | egrep -i --color 'cdrom|dvd|cd/rw|writer' /proc/sys/d ...

  7. CMake进行C/C++开发(linux下)

    开发环境配置 安装GCC,GDB sudo apt update # 通过以下命令安装编译器和调试器 sudo apt install build-essential gdb 安装成功确认 # 以下命 ...

  8. 注意:Spring Boot 2.7开始spring.factories不推荐使用了,接下来这么玩...

    如果你是Spring Boot用户的话,一定有这样的开发体验,当我们要引入某个功能的时候,只需要在maven或gradle的配置中直接引入对应的Starter,马上就可以使用了,而不需要像传统Spri ...

  9. SpringBoot Restful 接口实现

    目录 SpringBoot 核心注解 SpringBoot Restful 接口实现 封装响应数据 SpringBoot 核心注解 SpringBoot 基础入门 注解 说明 Component 声明 ...

  10. 渗透测试之sql注入点查询

    一切教程在于安全防范,不在于攻击别人黑别人系统为目的 寻找sql注入点方法: 拿到网页后进行查找注入点: 1.通过单引号 ' ;    在 url 后面输入单引号进行回车(如果报错可能存在sql注入为 ...