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

时间:2014-01-04 22:00:59

标签: c# contextmenu explorer

练习是从资源管理器上下文菜单启动一个C#程序,程序应该知道打开上下文菜单时文件夹的路径。

我做了这样的事情:将我的程序添加到资源管理器上下文菜单并添加以下代码:

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

    }
}

Basicaly这确实有效,但仅适用于在资源管理器中左侧树视图中选择的文件夹。接下来的问题是当我使用sw.LocationURL和路径“C:\ C#”时,结果是“file:/// C:/ C%23”。

是否有更简单的方法来获取我打开上下文菜单到c#的文件夹属性(路径,名称)?

1 个答案:

答案 0 :(得分:0)

我不能说你问题的第一部分,因为我没有使用shell扩展。但file:///C:/C%23是目录C:\C#的正确网址,并应用了urlencoding。如果要将此字符串转换为文件系统路径,可以执行以下操作:

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