【问题标题】:Get the path from an selected windows explorer folder to C# via context menu通过上下文菜单获取从选定的 Windows 资源管理器文件夹到 C# 的路径
【发布时间】:2014-01-04 22:00:58
【问题描述】:

练习是从资源管理器上下文菜单启动一个 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);
        }

    }
}

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

有没有更简单的方法来获取我在其上打开 C# 上下文菜单的文件夹属性(路径、名称)?

【问题讨论】:

    标签: c# contextmenu explorer


    【解决方案1】:

    我无法回答您问题的第一部分,因为我还没有处理过 shell 扩展。但是file:///C:/C%23 是目录C:\C# 的正确Url,应用了urlencoding。如果你想把这个字符串变成文件系统路径,你可以这样做:

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

    【讨论】:

    • 非常感谢!!这是解决它的第一步;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多