【问题标题】:c# retrieve file/folder path from selected file/folder in Context Menu Windows Explorerc#在上下文菜单Windows资源管理器中从选定的文件/文件夹中检索文件/文件夹路径
【发布时间】:2015-12-20 13:08:44
【问题描述】:

我正在尝试在 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();

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

【问题讨论】:

  • 我猜它是作为 main 方法的第一个命令行参数提供的。但我不确定您是否必须在注册表“命令”值中放置一些标记,如“%1”或其他内容。

标签: c# windows shell contextmenu windows-explorer


【解决方案1】:

将注册表项的值更改为

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

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

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

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

【讨论】:

    【解决方案2】:

    René Vogt 的回答非常棒,只有这一行:

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

    应该是:

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

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

    【讨论】:

    • 我正在使用 WPF C# 应用程序。我在注册中看到它创建了键和值。但是,我如何在 WPF C# 应用程序中获取文件夹或文件的当前路径?
    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2016-11-11
    相关资源
    最近更新 更多