为程序添加系统上下文菜单

简介:
using System;
using System.Diagnostics;
using Microsoft.Win32;

namespace SimpleContextMenu
{
    /// <summary>
    /// 在注册表中注册和注销文件上下文菜单.
    /// </summary>
    static class FileShellExtension
    {
        /// <summary>
        /// 注册上下文菜单
        /// </summary>
        /// <param name="fileType">要注册的文件类型</param>
        /// <param name="shellKeyName">在注册表中显示的名称</param>
        /// <param name="menuText">在上下文菜单中显示的文字</param>
        /// <param name="menuCommand">被执行的命令行</param>
        public static void Register(string fileType, string shellKeyName, string menuText, string menuCommand)
        {
            Debug.Assert(!string.IsNullOrEmpty(fileType) &&
                !string.IsNullOrEmpty(shellKeyName) &&
                !string.IsNullOrEmpty(menuText) &&
                !string.IsNullOrEmpty(menuCommand));

            //创建注册表位置的完整路径
            string regPath = string.Format(@"{0}\shell\{1}", fileType, shellKeyName);

            //注册表中添加上下文菜单
            using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(regPath))
            {
                key.SetValue(null, menuText);
            }

            //添加命令到被调用的注册表
            using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(string.Format(@"{0}\command", regPath)))
            {
                key.SetValue(null, menuCommand);
            }
        }

        /// <summary>
        /// 注销上下文菜单.
        /// </summary>
        /// <param name="fileType">注销的文件类型</param>
        /// <param name="shellKeyName">在注册表中注册的名称</param>
        public static void Unregister(string fileType, string shellKeyName)
        {
            Debug.Assert(!string.IsNullOrEmpty(fileType) && !string.IsNullOrEmpty(shellKeyName));

            // 注册表中的位置的完整路径	
            string regPath = string.Format(@"{0}\shell\{1}", fileType, shellKeyName);

            //从注册表中删除上下文菜单
            Registry.ClassesRoot.DeleteSubKeyTree(regPath);
        }
    }

}

调用方法:

using System;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

[assembly: CLSCompliant(true)]
namespace SimpleContextMenu
{
    static class Program
    {       
        const string FileType = "Directory";          // 注册的文件类型
        const string KeyName = "Simple Context Menu"; //在注册表的上下文菜单名称
        const string MenuText = "Copy to Grayscale";  // 上下文菜单文本

        [STAThread]
        static void Main(string[] args)
        {
            // 注册右键菜单
            if (!ProcessCommand(args))
            {
                //接收命令行参数处理
            }
        }
	}
}

原文地址: http://www.codeproject.com/Articles/15171/Simple-shell-context-menu


目录
相关文章
|
存储
硬盘碎片整理的原理是什么?
硬盘碎片整理的原理是什么?
650 4
|
数据采集 搜索推荐 数据管理
阿里云百炼产品月刊【2024年8月】
阿里云百炼产品月刊【2024年8月】,涵盖本月产品和功能发布、应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
685 0
|
数据采集 数据可视化 算法
Python在大数据分析中的力量:Pandas、NumPy与SciPy
【4月更文挑战第8天】Pandas、NumPy和SciPy是Python数据分析的核心,构成其在大数据领域的重要地位。Pandas提供高效的数据操作,包括DataFrame和Series结构,以及数据清洗和预处理工具。NumPy专注于数组计算,提供高性能的ndarray和数学函数。SciPy则包含专业算法,适用于科学与工程计算。这三者协同工作,覆盖数据分析的全过程,形成强大的Python生态系统。随着社区的不断创新和新库的涌现,如Dask和CuDF,Python在大数据分析领域的潜力将持续增长。
682 0
|
供应链 算法 安全
阿里云E2 云采销:云采销产品整体介绍|学习笔记(一)
快速学习阿里云E2 云采销:云采销产品整体介绍。
阿里云E2 云采销:云采销产品整体介绍|学习笔记(一)
PDF文件一键压缩工具V1.0-免费版
PDF文件一键压缩工具V1.0可以批量把PDF大文件一键压缩,减小PDF大小。
413 0
PDF文件一键压缩工具V1.0-免费版
|
Oracle Java 关系型数据库
Windows10下的JDK1.8下载安装与配置教程
Windows10下的JDK1.8下载安装与配置教程
855 0
Windows10下的JDK1.8下载安装与配置教程
|
云安全 弹性计算 运维
阿里云ACP考试都有什么方向?考试内容难不难?
现在越来越多的人都打算考一个认证来提升自己的竞争力,以便获得更好的发展,而阿里云ACP可以说是现在ICT行业内非常具有含金量的证书了,很多人都想考一个证书来帮助自己升职加薪。但是关于证书的详细事项,很多人还是不能理解,接下来小编就详细介绍一下
阿里云ACP考试都有什么方向?考试内容难不难?
|
移动开发 运维 前端开发
|
Python
VSCode中设置Python解释器运行Scrapy
VSCode中设置Python解释器运行Scrapy
449 0
|
搜索推荐 开发工具 iOS开发
[iOS初级教程之二]DeepLink实践
[iOS初级教程之二]DeepLink实践
671 0
[iOS初级教程之二]DeepLink实践