【问题标题】:Get folder path from Explorer window从资源管理器窗口获取文件夹路径
【发布时间】:2014-01-06 22:15:28
【问题描述】:

我有一个指向打开的资源管理器窗口的指针,我想知道它的完整路径。

例如:

int hWnd = FindWindow(null, "Directory");

但是现在,如何获取像"C:\Users\mm\Documents\Directory"这样的目录完整路径

【问题讨论】:

  • 你能详细说明一下吗?我担心我不明白 Window 如何成为目录。您的意思是说您获得了 Windows 资源管理器窗口的句柄,并且您想知道当前打开的是哪个文件夹?
  • 是的,我的意思是:我得到了一个 Windows 资源管理器窗口的句柄,我想知道当前打开的是哪个文件夹。
  • 你到底想做什么?有可能是实现您的总体目标的好方法,而不是尝试在另一个进程的给定窗口内找到特定的文本元素并获取其文本...
  • 我已将标题更改为接近您试图实现的目标。随意编辑。旁注:在添加感谢信之前,请检查meta
  • 你的目标是错误的方法。如果您不希望用户访问文件夹,请使用文件夹权限或组策略来限制访问。仅仅关闭不属于你的 UI 窗口绝对是最糟糕的主意,IMO。

标签: c# .net winapi


【解决方案1】:

以下是获取该信息的方法:

    IntPtr MyHwnd = FindWindow(null, "Directory");
    var t = Type.GetTypeFromProgID("Shell.Application");
    dynamic o = Activator.CreateInstance(t);
    try
    {
        var ws = o.Windows();
        for (int i = 0; i < ws.Count; i++)
        {
            var ie = ws.Item(i);
            if (ie == null || ie.hwnd != (long)MyHwnd) continue;
            var path = System.IO.Path.GetFileName((string)ie.FullName);
            if (path.ToLower() == "explorer.exe")
            {
                var explorepath = ie.document.focuseditem.path;
            }
        }
    }
    finally
    {
        Marshal.FinalReleaseComObject(o);
    } 

改编自:http://msdn.microsoft.com/en-us/library/windows/desktop/bb773974(v=vs.85).aspx

干杯

编辑:我将不返回完整路径的 ie.locationname 更改为 ie.document.focuseditem。路径,目前看来是可行的。

【讨论】:

  • 结果只是打开窗口的名字,不是完整路径
  • Althoug,如果我没有在窗口上选择任何项目,它将无法工作
  • 请更具体。 “将不起作用”很难调试,并且可能意味着任何事情。
  • 是的,我明白 :) 我刚刚提出了建设性意见!你的代码真的很有帮助。非常感谢
  • 我发现var explorepath = new Uri(ie.LocationURL).LocalPath; 在没有选定项目时也可以工作。
【解决方案2】:

如果你运行 spy++ 并以 Expolrer 窗口为目标,你会看到该窗口的 Title 或 Caption 通常反映了用户打开的当前目录

所以你需要的是使用窗口句柄来获取它的标题。 我建议以下链接将指导您

http://social.msdn.microsoft.com/Forums/vstudio/en-US/fd03235e-22af-41a4-aa95-2806b3cb1114/win32-getting-a-window-title-from-a-hwnd?forum=csharpgeneral

How to get the name of an External window in C# Application?

【讨论】:

  • 我已经有了窗口的标题。是的,它通常反映当前打开的目录,所以我想要的是打开目录的完整路径
  • 这不是一个好主意,因为对于用户来说,让它通过文件夹选项显示完整路径是可选的。我知道你经常这么说,但假设某事几乎不是一个好主意。
  • 抱歉,不得不投反对票,因为它提出了可以想象的最粗鲁的组合。更重要的是,Shell 提供了一个干净、受支持且记录在案的自动化界面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 2011-01-31
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多