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

本文关键字:文件 文件夹 路径 检索 上下文 菜单 Windows 资源管理器 | 更新日期: 2023-09-27 18:27:25

我正试图在Windows资源管理器的上下文菜单中为任何文件和文件夹实现一个选项。我已经通过在regedit中写入来实现这一点。

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();

应用程序按我的意愿打开,但我不知道如何获取上下文菜单中选择的文件/文件夹的路径。我该怎么做?

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

将注册表项的值更改为

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

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

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

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

RenéVogt的答案只有这一行才是伟大的:

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

应该是:

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

如果没有引号,当目录或文件路径包含空格时,args[]数组包含多个字符串。