Healthy (2011) http://blog.sina.com.cn/s/blog_752ca76a0100y5yv.html (Available at 2013/11/16)
意图:在 Windows 文件系统中添加自定义的右键菜单项。
方法:通过改写注册表实现
一、给所有类型的文件添加自定义的右键菜单
HKEY_CLASSES_ROOT\*\shell
HKEY_CLASSES_ROOT\*\shell\自定义的菜单名
HKEY_CLASSES_ROOT\*\shell\自定义的菜单名\command
值名称:(默认) 类型:REG_SZ 数据:关联程序的完全限定名称
二、给所有文件夹添加自定义的右键菜单
HKEY_CLASSES_ROOT\Directory\shell
HKEY_CLASSES_ROOT\Directory\shell\自定义的菜单名
HKEY_CLASSES_ROOT\Directory\shell\自定义的菜单名\command
值名称:(默认) 类型:REG_SZ 数据:关联程序的完全限定名称
实现:C# WinForm
using Microsoft.Win32; private void AddFileContextMenuItem(string itemName, string associatedProgramFullPath) { //创建项:shell RegistryKey shellKey = Registry.ClassesRoot.OpenSubKey(@"*\shell",true); if (shellKey == null) { shellKey = Registry.ClassesRoot.CreateSubKey(@"*\shell"); } //创建项:右键显示的菜单名称 RegistryKey rightCommondKey = shellKey.CreateSubKey(itemName); RegistryKey associatedProgramKey= rightCommondKey.CreateSubKey("command"); //创建默认值:关联的程序 associatedProgramKey.SetValue(string.Empty, associatedProgramFullPath); //刷新到磁盘并释放资源 associatedProgramKey.Close(); rightCommondKey.Close(); shellKey.Close(); } private void AddDirectoryContextMenuItem(string itemName, string associatedProgramFullPath) { //创建项:shell RegistryKey shellKey = Registry.ClassesRoot.OpenSubKey(@"directory\shell", true); if (shellKey == null) { shellKey = Registry.ClassesRoot.CreateSubKey(@"*\shell"); } //创建项:右键显示的菜单名称 RegistryKey rightCommondKey = shellKey.CreateSubKey(itemName); RegistryKey associatedProgramKey = rightCommondKey.CreateSubKey("command"); //创建默认值:关联的程序 associatedProgramKey.SetValue("", associatedProgramFullPath); //刷新到磁盘并释放资源 associatedProgramKey.Close(); rightCommondKey.Close(); shellKey.Close(); }
Reference: http://msdn.microsoft.com/en-us/library/cc144148(VS.85).aspx
【正文结束】