[转]C# 注册自己的右键菜单 (文件夹/文件)

一个小小的例子, 演示了如何通过操作注册表, 添加自己的文件或文件夹右键菜单.

// 添加到注册表
private void btnRegister_Click(object sender, EventArgs e)
{
if (this.tbMenuTitle.Text.Length == 0) return;

// 注册到文件
if (this.ckRegToFile.Checked)
{
RegistryKey shell
= Registry.ClassesRoot.OpenSubKey("*", true).OpenSubKey("shell", true);
if (shell == null) shell = Registry.ClassesRoot.OpenSubKey("*", true).CreateSubKey("shell");
RegistryKey custome
= shell.CreateSubKey(this.tbMenuTitle.Text);
RegistryKey cmd
= custome.CreateSubKey("command");
cmd.SetValue(
"", Application.ExecutablePath + " %1");
cmd.Close();
custome.Close();
shell.Close();
}

// 注册到文件夹
if (this.ckRegToDir.Checked)
{
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(this.tbMenuTitle.Text);
RegistryKey cmd
= custome.CreateSubKey("command");
cmd.SetValue(
"", Application.ExecutablePath + " %1");
cmd.Close();
custome.Close();
shell.Close();
}
MessageBox.Show(
"注册成功!", "提示");
}

// 反注册
private void btnUnRegister_Click(object sender, EventArgs e)
{
RegistryKey shell
= Registry.ClassesRoot.OpenSubKey("*", true).OpenSubKey("shell", true);
if (shell != null) shell.DeleteSubKeyTree(this.tbMenuTitle.Text);

shell
= Registry.ClassesRoot.OpenSubKey("directory", true).OpenSubKey("shell", true);
if (shell != null) shell.DeleteSubKeyTree(this.tbMenuTitle.Text);

shell.Close();

MessageBox.Show(
"反注册成功!", "提示");
}



另外一个例子codeproject上的:

 http://www.codeproject.com/KB/cs/appendmenu.aspx?msg=3335190#xx3335190xx

原文地址:https://www.cnblogs.com/jjj250/p/2059046.html