在C#中监视资源管理器中的文件选择(如剪贴板监视)

时间:2010-03-05 21:55:33

标签: c# .net monitoring explorer

我正在尝试创建一个小帮助应用程序,一个场景是“文件复制查找器”。我想做的是:

  • 我启动了我的C#.NET应用程序,它给了我一个空列表。
  • 启动普通的Windows资源管理器,在某个文件夹中选择一个文件
  • C#应用程序告诉我有关此文件的内容(例如重复)

如何在“普通”Windows资源管理器实例中监控当前选定的文件。我是否必须使用.NET启动实例以获取进程的句柄。我需要一个句柄,还是有一些“全局钩子”我可以在C#里面监视。它有点像监控剪贴板,但不完全一样......

任何帮助都表示赞赏(如果您没有代码,只需指向正确的interops,dll或帮助页面:-)谢谢,Chris

编辑1(当前来源,感谢Mattias)

using SHDocVw;
using Shell32;

public static void ListExplorerWindows()
{
    foreach (InternetExplorer ie in new ShellWindowsClass())
        DebugExplorerInstance(ie);
}

public static void DebugExplorerInstance(InternetExplorer instance)
{
    Debug.WriteLine("DebugExplorerInstance ".PadRight(30, '='));
    Debug.WriteLine("FullName " + instance.FullName);
    Debug.WriteLine("AdressBar " + instance.AddressBar);
    var doc = instance.Document as IShellFolderViewDual ;
    if (doc != null)
    {
        Debug.WriteLine(doc.Folder.Title);
        foreach (FolderItem item in doc.SelectedItems())
        {
            Debug.WriteLine(item.Path);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用shell自动化接口执行此操作。

的基本过程
  1. 在Shdocwv.dll上运行Tlbimp Shell32.dll(或直接添加一个 参考来自VS)。
  2. 创建一个 ShellWindows的实例 收集和迭代。这将 包含Windows资源管理器和 Internet Explorer窗口。
  3. 对于 Windows资源管理器窗口, IWebBrowser2.Document属性会 返回IShellFolderViewDual 参考
  4. IShellFolderViewDual 你可以使用SelectedItems方法 查询和更改您的事件 可以处理。