今天介绍一下在注册表中添加系统右键菜单实现在文件夹的右键菜单中添加,删除以及查找是否已经添加的方法。

注意这里的方法仅限于Windows11之前使用,Windows11默认的右键菜单已经改变,需要使用其他方式处理。

查询是否存在

RegistryKey shell = Registry.ClassesRoot.OpenSubKey("directory", false).OpenSubKey("shell", false);
if (shell == null)
{
return false;
} if (shell.GetSubKeyNames().Any(x => x == 查找的key)
{
turn true;
}
return false;

这里首先我们在ClassesRoot中打开directory,这里使用false即可,因为我们只是查找,不需要写入。使用false的好处是对权限要求比较低,更不容易出问题。

增加菜单项

        RegistryKey shell = Registry.ClassesRoot.OpenSubKey("directory", true).OpenSubKey("shell", true);
if (shell == null) shell = Registry.ClassesRoot.OpenSubKey("directory", 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("注册成功!", "提示");

这里注意几个地方,首先directory这个Key肯定是存在的,其次是它可能没有shell这个子key。

所以我们要判断一下,如果没有shell就创建一下。

然后注意这个RegistryKey custome = shell.CreateSubKey(你的键名称);这里的键名称可以直接与你的菜单名一致,比如你想统计文件数量,那这里可以写成RegistryKey custome = shell.CreateSubKey("统计此文件夹文件数量");

如果这样写,那么下面的那句custome.SetValue("", 你的菜单名称);就可以不写了。

但是如果你的键名称有些特殊字符,或者为了好看一些,可以把键名称命名为简单的名字,比如RegistryKey custome = shell.CreateSubKey("sum");然后在SetValue的时候给真正的显示名称custome.SetValue("", "统计此文件夹文件数量");

这两种写法都可以。

然后是固定写法,RegistryKey cmd = custome.CreateSubKey("command");创建一个叫command的键,在这个键里面加执行路径,cmd.SetValue("", Application.ExecutablePath + " %1");这个Application.ExecutablePath是启动文件的路径,这里我们使用这个右键菜单打开自己的程序,你如果想打开其他的程序,把这里修改成对应的程序的完整路径即可。后面的%1是文件夹的路径,它会作为第一个参数传入你的程序,在mainstring[] args里既可获取到对应的路径。

最后不要忘记关闭所有的key,就完成了。

删除菜单项

删除跟添加路子一样,只不过一个是加上一个子菜单项,一个是把子菜单项全部删掉就是了。

    RegistryKey shell = Registry.ClassesRoot.OpenSubKey("directory", true).OpenSubKey("shell", true);
if (shell != null) shell.DeleteSubKeyTree(你的键名称); shell.Close();

这里注意下这个键名称要跟你添加的时候的键名称保持一致就行了。

c# 添加系统右键菜单(Windows11以前)的更多相关文章

  1. c# 添加指定扩展名的系统右键菜单(Windows11以前)

    在上篇文章c# 添加系统右键菜单(Windows11以前)中我们说了怎么在文件夹上增加一个菜单项,但是我们可能还需要给某个单独的扩展名添加右键菜单. 这里我们不用常见的扩展名来做,我们新做一个.jx的 ...

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

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

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

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

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

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

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

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

  6. 如何在C#添加鼠标右键菜单

    C#添加鼠标右键方法步骤: 1 选中要添加右键功能的Form或者控件,打开控件的设计页面. 2 从工具箱中找到ContextMenuStrip控件,将这个控件拖曳到Form或者控件的设计页面上.这时系 ...

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

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

  8. Beyond Compare3 添加到右键菜单

    Beyond Compare 是个优秀的工具,我们经常用于对比文件和文件夹,右键点点就可以调用对比,着实很方便.但从3.2版本之前,我们可以从设置中将bc关联到文件夹和文件右键,但之后的版本已经找不到 ...

  9. 将程序添加到右键菜单和图标(以记事本、UltraEdit为例)

    原文:将程序添加到右键菜单(以记事本.UltraEdit为例) 如何将程序加入右键菜单,这里分别以记事本.UltraEdit为例! 以记事本程序为例: 1. 在运行中输入regedit,打开注册表,找 ...

  10. WinForm -- 为TextBox文本框添加鼠标右键菜单

    WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...

随机推荐

  1. TextIn文档树引擎,助力RAG知识库问答检索召回能力提升

    ​ TextIn团队的文档解析测评工具Markdown Tester在Github发布后,我们陆续与大家探讨了目前业内对PDF解析工作的评判标准与我们各项测评指标的设计原理,包括段落.表格.公式.阅读 ...

  2. Shiro-550—漏洞分析(CVE-2016-4437)

    目录 漏洞原理 源码分析 加密过程 解密过程 漏洞复现 漏洞原理 Shiro-550(CVE-2016-4437)反序列化漏洞 在调试cookie加密过程的时候发现开发者将AES-CBC用来加密的密钥 ...

  3. C# 裁剪PDF页面

    在处理PDF文档时,有时需要精确地裁剪页面以适应特定需求,比如去除广告.背景信息或者仅仅是为了简化文档内容.本文将介绍如何使用免费.NET控件通过C#实现裁剪PDF页面. 免费库 Free Spire ...

  4. .net6 使用gRPC示例

    创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(客户端),测试项目结构如下: 公共模型 测试接口相关类,放在公共类库中,方便服务端和客户端引用相同模型 public class R ...

  5. Flutter将视频或图文分享到抖音

    如何在 Flutter 中分享视频到抖音 话不多说,先上效果: 原理 发布内容至抖音 H5 场景_移动/网站应用_抖音开放平台 (open-douyin.com) 本教程没有接入抖音原生 SDK 以及 ...

  6. 批量读取nii文件的shape

    import SimpleITK as sitk from glob import glob import os path = glob(r"D:\MyData\date\*") ...

  7. 虚拟dom的优缺点

    虚拟dom 是js模拟的一颗dom树,也是 js 对象 : 虚拟dom 时相对于 真实dom而言的,操作真实 dom 开销太大,降低了性能,所以使用 虚拟 dom 替代真实 dom 完成操作和计算功能 ...

  8. 中国移动基于 Kubernetes 的物联网边缘计算应用实践

    作者:何毓川,中移物联网,云计算开发高级工程师 EdgeBox简介 中移物联网是中国移动集团在物联网方向的专业研发子公司,在各个垂直行业都有非常丰富和完成的解决方案. 本文通过中移物联网的物联网边缘计 ...

  9. 这些HTTP协议状态码你知道吗?

    使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 1x ...

  10. Machine Learning Week_4 Neural Networks: Representation

    目录 0 Neural Networks: Representation 1 Motivations 1.1 Non-linear Hypotheses 1.2 Neurons and the Bra ...