C# 通过上下文菜单获取从选定windows资源管理器文件夹到C的路径

C# 通过上下文菜单获取从选定windows资源管理器文件夹到C的路径,c#,contextmenu,explorer,C#,Contextmenu,Explorer,这个练习是从explorers上下文菜单启动一个C程序,程序应该知道打开上下文菜单时上文件夹的路径 我所做的:将我的程序添加到explorers上下文菜单并添加以下代码: SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows(); string filename; ArrayList windows = new ArrayList(); foreach (SHDocVw.InternetExplorer ie in shel

这个练习是从explorers上下文菜单启动一个C程序,程序应该知道打开上下文菜单时上文件夹的路径

我所做的:将我的程序添加到explorers上下文菜单并添加以下代码:

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();

string filename;
ArrayList windows = new ArrayList();

foreach (SHDocVw.InternetExplorer ie in shellWindows)
{
    filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
    if (filename.Equals("explorer"))
    {
        Console.WriteLine("Hard Drive: {0}", ie.LocationURL);
        windows.Add(ie);

        Shell shell = new Shell32.Shell();
        foreach (SHDocVw.InternetExplorerMedium sw in shell.Windows())
        {
            Console.WriteLine(sw.LocationURL);
        }

    }
}
基本上,这确实有效,但仅适用于在资源管理器的左侧树状视图中选择的文件夹。下一个问题是,当我将sw.LocationURL与路径C:\C一起使用时,结果是file:///C:/C%23.


有没有一种更简单的方法来获取文件夹属性Path,即我在其上向c打开上下文菜单的名称

我不能回答你问题的第一部分,因为我还没有研究shell扩展。但是file:///C:/C%23 是目录C:\C的正确Url,已应用Url编码。如果要将此字符串转换为文件系统路径,可以执行以下操作:

var uri = new Uri("file:///C:/C%23");
var path = Uri.LocalPath;

谢谢!!这是解决问题的第一步;