c#从上下文菜单Windows资源管理器中检索所选文件/文件夹中的文件/文件夹路径

时间:2015-12-20 13:08:44

标签: c# windows shell contextmenu windows-explorer

我试图在Windows资源管理器的上下文菜单中为任何文件和任何文件夹实现一个选项。 我通过写入注册表来实现这一目标。

Using Microsoft.Win32;
...
RegistryKey key;
// Register to any file
key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\CLASSES\*\shell\MyProject");
key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\CLASSES\*\shell\MyProject\command");
// Register to folder
key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\CLASSES\Folder\shell\MyProject");
key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\CLASSES\Folder\shell\MyProject\command");
// Default value points to the app
key.SetValue("", Application.StartupPath + @"\MyProject.exe");
key.Close();

应用程序打开我想要的,但是我不知道如何获取在上下文菜单中选择的文件/文件夹的路径。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

将注册表项的值更改为

key.SetValue("", Application.StartupPath + @"\MyProject.exe %1");

因此%1将替换为所选的文件/文件夹。在您的main方法中,您可以通过以下方式访问:

static void Main(string[] args)
{
    Console.WriteLine("Selected file/folder: {0}", args[0]);
}

不幸的是,这不适用于多选。放置%2等是没有用的。如果选择了多个文件或文件夹,则会为每个文件或文件夹分别调用它们。

答案 1 :(得分:1)

RenéVogt的答案仅在以下这一行很棒:

key.SetValue("", Application.StartupPath + @"\MyProject.exe %1");

应为:

key.SetValue("", Application.StartupPath + @"\MyProject.exe \"%1\"");

当目录或文件路径包含空格时,args[]数组不包含引号。