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());
我们就可以把我们的处理程序附加到原来的处理程序里面了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战