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

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

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

如何在“普通”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); } } } 

您可以使用shell自动化接口执行此操作。 基本过程是

  1. 在Shdocwv.dll和Shell32.dll上运行Tlbimp(或直接从VS添加引用)。
  2. 创建ShellWindows集合的实例并进行迭代。 这将包含Windows资源管理器和Internet Explorer窗口。
  3. 对于Windows资源管理器窗口,IWebBrowser2.Document属性将返回IShellFolderViewDual引用。
  4. IShellFolderViewDual具有您可以查询的SelectedItems方法以及您可以处理的更改事件。