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

注意这里的方法仅限于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. RxJS 系列 – Custom Operator

    前言 虽然 RxJS 提供了非常多的 Operators. 但依然会有不够用的时候. 这时就可以自定义 Operator 了. Operator Is Just a Function Observab ...

  2. ASP.NET Core – Program.cs and Startup.cs 小笔记

    前言 ASP.NET Core 6.0 以后, 默认模板去掉了 Program.cs 的 namespace, class 和 Startup.cs, 一开始看会有点懵. 这篇大概记入一下, prog ...

  3. SQL Server – Soft Delete

    前言 Soft Delete 中文叫 "逻辑删", "软删除". 对比的自然就是 Hard Delete. 这篇想聊一聊它的好与坏, 什么时候可以考虑用它. H ...

  4. GPUStack 0.2:开箱即用的分布式推理、CPU推理和调度策略

    GPUStack 是一个专为运行大语言模型(LLM)设计的开源 GPU 集群管理器,旨在支持基于任何品牌的异构 GPU 构建统一管理的算力集群,无论这些 GPU 运行在 Apple Mac.Windo ...

  5. 支持Docker的底层技术(Namespaces?CGroups?UnionFS?Docker 架构?)(二)

    上一篇介绍了Docker基本概念,这一篇介绍下支持Docker的底层技术 Docker 本质就是宿主机的一个特殊进程,Docker 是通过 namespace 实现资源隔离,通过cgroup 实现资源 ...

  6. 普元中间件Primeton AppServer6.5安装(Windows)

    本文在Windows环境下安装普元中间件Primeton AppServer6.5(以下简称PAS) 一.安装前准备 1.1使用软件版本 Primeton_AppServer_6.5_Enterpri ...

  7. 《MongoDB游记之轻松入门到进阶》代码下载

    <MongoDB游记之轻松入门到进阶>代码下载,看看有没有用 http://pan.baidu.com/s/1boKG28R https://item.jd.com/12236244.ht ...

  8. linux(centos7)安装curl和composer

    linux(centos7)安装curl和composer 先安装curl:直接用yum装,yum curl 使用命令下载: curl -sS https://getcomposer.org/inst ...

  9. 2022年8月中国数据库排行榜:openGauss重夺榜眼,PolarDB反超人大金仓

    "烈日杲杲,夺榜愈烈." 2022年8月的 墨天轮中国数据库流行度排行榜 火热出炉,8月排行榜共有236个数据库参与排名.本月榜单前十名的变化可以用"两反超"来 ...

  10. 41.key发生变化,dom还会复用吗

    会复用但是可能会产生没有必要的真实DOM更新  ,会降低渲染效率 :比如使用 index 作为 key 值 :