• 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());

    我们就可以把我们的处理程序附加到原来的处理程序里面了。

  • 相关阅读:
    kafka 命令行使用 消息的写入和读取 quickstart
    【算法】斐波那契数列与台风的故事
    【docker】容器无法使用vi等命令,无法联网,无法换源如何解决?
    2024年华为OD机试真题- 项目排期-Python-OD统一考试(C卷)
    Git版本控制中的一些问题及解决方法
    学生HTML个人网页作业作品:基于HTML实现教育培训机构网站模板毕业源码(8页)
    链表【数据结构与算法Java】
    从 async 和 await 函数返回值说原理
    72编辑距离
    本教程旨在为正在构建,部署和使用CarbonData的最终用户和开发人员提供故障排除。
  • 原文地址:https://www.cnblogs.com/j4587698/p/16494573.html