在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自动化接口执行此操作。 基本过程是
- 在Shdocwv.dll和Shell32.dll上运行Tlbimp(或直接从VS添加引用)。
- 创建ShellWindows集合的实例并进行迭代。 这将包含Windows资源管理器和Internet Explorer窗口。
- 对于Windows资源管理器窗口,IWebBrowser2.Document属性将返回IShellFolderViewDual引用。
- IShellFolderViewDual具有您可以查询的SelectedItems方法以及您可以处理的更改事件。