给右键添加菜单项,微软首先推荐静态方式,即给文件类型或者系统子健添加一个conmmand命令
如果要添加一个右键菜单项,首先考虑添加范围,1)某一系统子健(系统所有文件、系统所有目录、系统空白右键、shift右键等);2)某一文件类型添加
系统子健添加
常用的子健:
HKEY_CLASSES_ROOT*:系统所有文件,右键系统任一文件都会添加右键菜单
HKEY_CLASSES_ROOT\AllFilesystemObjects:系统所有文件和文件夹,右键任一文件或者文件夹都会添加右键菜单
HKEY_CLASSES_ROOT\Folder:系统所有文件夹,右键系统任一文件夹都会添加右键菜单
HKEY_CLASSES_ROOT\Directory:系统所有目录,右键系统任一文件夹都会添加右键菜单
HKEY_CLASSES_ROOT\Directory\Background:系统文件夹空白处右键,在文件夹内空白处右键都会添加右键菜单
其他详情参考MSDN
具体在何处添加,根据自己需求处理,有可能会在多处都添加;有兴趣的可以仔细看一下自己的注册表,或者用“右键管理工具”把右键功能全部列出来,有的右键可能在多个子健下都有添加,或者同一类型的右键功能可能是在不同子健下添加的
以HKEY_CLASSES_ROOT*为例
效果如下所示
command数据可以添加参数,具体使用细节可以查考相关资料,下面给上述添加一个参数接受文件名称,在命令之后添加%1接受文件名称
某一文件类型添加
给某一文件类型添加右键菜单,首先要注册文件类型,给系统注册自己的文件类型,指明文件后缀名
同时添加文件关联子项,注册右键菜单
效果如下
特定文件添加右键菜单
前面示例都是如何添加文件菜单,但是都是给某一类型文件添加的右键菜单,如果想给某个特定文件添加右键菜单可以通过添加值“AppliesTo”来实现简单过滤
因此我们可以给command添加子健AppliesTo限定我们右键添加的条件,如果一个文件名称中包含exampleText1,那么此右键功能是可以的
上述三个文件只有在右键”myTest.MyFileType”的时候才会有右键菜单,右键其他两个不会有右键菜单
AppliesTo的局限性在于只支持win7之后的系统,win7之前的系统不支持
————————————————
版权声明:本文为CSDN博主「大飞的江湖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yang382197207/article/details/80079052
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Microsoft.Win32;
namespace AppC
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
/// 是否通过关联打开的软件
if (args.Length > 0)
Application.Run(new mainForm(args[0].ToString()));
else
{
string keyName;
string keyValue;
keyName = "WPCFile";
keyValue = "资源包文件";
RegistryKey isExCommand = null;
bool isCreateRegistry = true;
try
{
/// 检查 文件关联是否创建
isExCommand = Registry.ClassesRoot.OpenSubKey(keyName);
if (isExCommand == null)
{
isCreateRegistry = true;
}
else
{
if (isExCommand.GetValue("Create").ToString() == Application.ExecutablePath.ToString())
{
isCreateRegistry = false;
}
else
{
Registry.ClassesRoot.DeleteSubKeyTree(keyName);
isCreateRegistry = true;
}
}
}
catch (Exception)
{
isCreateRegistry = true;
}
/// 假如 文件关联 还没有创建,或是关联位置已被改变
if (isCreateRegistry)
{
try
{
RegistryKey key, keyico;
key = Registry.ClassesRoot.CreateSubKey(keyName);
key.SetValue("Create", Application.ExecutablePath.ToString());
keyico = key.CreateSubKey("DefaultIcon");
keyico.SetValue("", Application.ExecutablePath + ",0");
key.SetValue("", keyValue);
key = key.CreateSubKey("Shell");
key = key.CreateSubKey("Open");
key = key.CreateSubKey("Command");
/// 关联的位置
key.SetValue("", "/"" + Application.ExecutablePath.ToString() + "/" /"%1/"");
/// 关联的文件扩展名,
keyName = ".wpc";
keyValue = "WPCFile";
key = Registry.ClassesRoot.CreateSubKey(keyName);
key.SetValue("", keyValue);
}
catch (Exception)
{
}
}
Application.Run(new mainForm(""));
}
}
}
}
代码来自:https://blog.csdn.net/zzh87615/article/details/6251352