右键菜单的添加和文件路劲的获取是和windows注册表相关的,windos+R输入regedit命令查看,里面有很多的注册项,而在windows变成中可以通过RegistryKey来添加注册项
1、添加右键菜单
//注册右键菜单
static private void AddFileContextMenuItem(string itemName)
{
//以只读方式检查子项
RegistryKey shellKey = Registry.ClassesRoot.OpenSubKey(@"*\shell", true);
if (shellKey == null){
shellKey = Registry.ClassesRoot.CreateSubKey(@"*\shell");
}
//检索所有包含子项的数组名,不存在则创建
string[] ttt = shellKey.GetSubKeyNames();
for (int i = 0; i < ttt.Length; i++) {
if (ttt[i] == itemName) {
shellKey.Close();
return;
}
}
//创建项:右键显示的菜单名称
RegistryKey rightCommondKey = shellKey.CreateSubKey(itemName);
//刷新到磁盘并释放资源
rightCommondKey.Close();
shellKey.Close();
}
实际上可以在shell下面找到我们创建的子项,更多的可以在msdn上查看到这个类的具体用法
https://msdn.microsoft.com/zh-cn/library/microsoft.win32.registrykey.aspx
2、获取文件的路劲
需要获取menu的路劲,首先是需要检查menu是否注册成功,使用的FindWindow函数来获取窗口的句柄,然后检查句柄的值可以做判断
// 获取右键菜单的窗口句柄
int WINDOW_HANDLER = FindWindow(null, menu_name).ToInt32();
if (WINDOW_HANDLER != 0){
Console.WriteLine("not found menu");
Console.ReadLine();
}else{
// 获取真正的路劲
}
获取真正的路劲,文件的名称是作为当前线程的一个命令行参数传入的,所以我们直接通过Environment的GetCommandLineArgs()函数就可以获取
excle_path = Environment.GetCommandLineArgs()[Environment.GetCommandLineArgs().Length - 1];
Console.WriteLine(string.Format("The File Path is Below\n {0}",excle_path));
注意Environment.GetCommandLineArgs()[Environment.GetCommandLineArgs().Length - 1];实际上是一个string[ ]变量值