using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace Sci
{public class RegistryTool{#region 添加自定义右键菜单/// <summary>/// 在widows系统中为指定类型的文件或文件夹,添加自定义右键菜单/// </summary>/// <param name="fileExten">文件拓展名如:".txt" 为所有类型的文件添加为 "*" </param>/// <param name="menuId">内部id</param>/// <param name="menuName">显示名称</param>/// <param name="exePath">发送命令到指定的exe</param>/// <param name="callBackArg">标识当前菜单项的自定义参数</param>/// <param name="isDirectory">是否为文件夹</param>public static void AddWindowsContextMenu(string fileExten, string menuId, string menuName, string exePath, string callBackArg = null, bool isDirectory = false){exePath = "\"" + exePath +"\"";string shellPath = (isDirectory ? "Directory" : fileExten) + @"\shell\";                    // 为指定类型的文件添加右键shell菜单,或为文件夹添加右键菜单RegistryKey shellSet = GetSubKey(Registry.ClassesRoot, shellPath, true); //Registry.ClassesRoot.OpenSubKey(shellPath, true);//if (shellSet == null)//{//    Registry.ClassesRoot.CreateSubKey(shellPath);//    shellSet = Registry.ClassesRoot.OpenSubKey(shellPath, true);//}RegistryKey menuSet = GetSubKey(shellSet, menuId, true);                                                // 创建Menu菜单项if (!menuSet.GetValue("", "").ToString().Equals(menuName)) menuSet.SetValue("", menuName);              // 菜单项显示名称if (!menuSet.GetValue("icon", "").ToString().Equals(exePath)) menuSet.SetValue("icon", exePath);        // 菜单项显示图标RegistryKey commandSet = GetSubKey(menuSet, "command", true);                                           // 添加command命令Setstring commandInfo = exePath + (callBackArg == null ? "" : (" \"" + callBackArg + "\" ")) + " \"%1\"";  // %1为系统传递的文件或文件夹完整路径信息if (!commandSet.GetValue("", "").ToString().Equals(commandInfo)) commandSet.SetValue("", commandInfo);  // 添加命令内容}/// <summary>/// 从curKeySet下获取subkey/// </summary>/// <param name="curKeySet"></param>/// <param name="subKey"></param>/// <param name="autoCreate">不存在时是否创建</param>/// <returns></returns>private static RegistryKey GetSubKey(RegistryKey curKeySet, string subKey, bool autoCreate = false){RegistryKey subSet = curKeySet.OpenSubKey(subKey, true);if (subSet == null && autoCreate) subSet = curKeySet.CreateSubKey(subKey);return subSet;}/// <summary>/// 示例:为所有类型文件以及文件夹,添加系统右键shell菜单/// </summary>public static void AddContextMenu(string exePath){string ToolName = "ContextIteamName";//string exePath = Application.ExecutablePath;// 为所有类型的文件添加 系统菜单RegistryTool.AddWindowsContextMenu("*", ToolName, "自定义右键菜单1", exePath, null);// 为文件夹添加 系统菜单RegistryTool.AddWindowsContextMenu(null, ToolName, "自定义右键菜单1", exePath, null, true);}#endregion}
}

C# 添加windows右键菜单相关推荐

  1. window如何将CMD以管理员身份添加到右键菜单?

    参考文章:怎么将cmd以管理员身份运行添加到右键菜单 新建txt文件,输入: Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Direct ...

  2. 如何在 Windows 右键菜单中新建自己想要的文件格式

    文章目录 一.增加右键新建菜单文件类型 1.打开注册表 2.选择注册表项 3.新建项 4.新建字符串值 5.看效果 二.修改新建文件默认文件名 1.选择注册表项 2.设置表项 一.增加右键新建菜单文件 ...

  3. Windows 右键菜单扩展

    右键菜单,指用户在对Windows Shell Object右键单击时,弹出的上下文菜单(Context Menu). 如上图所示的对右键菜单进行扩展,属于Windows Shell Extensio ...

  4. 如何将一个Python脚本加入Windows右键菜单?

    一.背景 因为APP的日志都是经过加密处理了,所以每次如果要分析日志的话,得先将加密的日志文件进行解密. 而解密的脚本是用python写的,每次要解密一个文件 都需要在cmd目录下敲python目录来 ...

  5. VB添加IE右键菜单等

    /-------------------------------------------------- '*************************************** 'IE工具栏按 ...

  6. 【创建Windows右键菜单折叠】

    创建Windows右键菜单折叠 创建Windows右键菜单折叠 具体是使用了Windows注册表的SubCommands指令 参考 创建Windows右键菜单折叠 经常会发现windows里面右键菜单 ...

  7. Notepad++添加到右键菜单中的解决方案

    本文介绍将Notepad++下载到电脑后,右键菜单打开没有notepad++编辑选项的问题并且将其添加到右键菜单当中. 这是一键式直接写入注册表,将内容先复制到一个txt文件中,然后修改后缀名为reg ...

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

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

  9. [html] 如何给页面添加追加右键菜单(原右键菜单功能保持不变)

    [html] 如何给页面添加追加右键菜单(原右键菜单功能保持不变) 监听oncontextmenu,在系统右键菜单下追加自定义菜单 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚 ...

  10. Beyond Compare 3 中文版的安装注册及添加到右键菜单

    Beyond Compare 3 中文版的安装和注册 安装过程在网上都可以搜到,因为比较简单,这里就不再啰嗦了. 对于注册的过程,大家打开BCompare工具之后,点击菜单栏中的"帮助&qu ...

最新文章

  1. 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
  2. 模拟浏览器的神器 - HtmlUnit
  3. openwrt 遍译php_完全新手教程:编译openwrt全过程
  4. 经验教训 | STM32 异常之BFARVALID,PRECISERR,INVSTATE
  5. 【背包】作业(jzoj 1986)
  6. python rowcount_PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法...
  7. jQuery教程04-jQuery_this选择器
  8. 特别好看的一个多接口api的图床源码
  9. poj 1986 Distance Queries LCA
  10. 最低什么样的学历,才可以选择转行web前端?
  11. Linux Namespace机制简介
  12. 如何安装python3.8.2_Python 3.8.2详细图文安装教程(附安装包)
  13. 关于为什么10000000可以表示-128
  14. 用java求解八枚银币问题_算法笔记_004:8枚硬币问题【减治法】
  15. 未检测到ca设备或ca驱动异常_安川伺服驱动器SGDV报警原因及处理措施
  16. android 播放gif会闪,android 播放gif动图
  17. Linux安装glassfish、利用glassfish部署应用
  18. 基于 CSS3 的下一代 Web 应用开发,第 1 部分: 发展历史及新特性
  19. accept函数的参数不是随便填的
  20. 实习之路0--设计模式之策略模式的理解(鸭子类例子)

热门文章

  1. k8s core-dns 解析域名异常
  2. linux 进程死循环,排查程序死循环,死锁的方法 ——pstack
  3. java文件的命名_java命名规范
  4. android调整图片大小,Android图像调整大小并保留EXIF数据(方向,旋转等)
  5. 关于正则表达式的补充(贪婪和懒惰)
  6. 最好用的屏幕录像软件录制教程分享
  7. 在横道图中如何实现多级项目计划管控
  8. centos官网下载地址
  9. Electron桌面下雪特效实战文字版(附视频链接)
  10. php trim /r/n,「php中trim函数使用」- 海风纷飞Blog