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