在 C# 中监视资源管理器中的文件选择(如剪贴板监视)
我正在尝试创建一个小帮助应用程序,一种情况是“文件重复查找器”。我想做的是:
- 我启动我的 C# .NET 应用程序,它给了我一个空列表。
- 启动普通的 Windows 资源管理器,在某个文件夹中选择一个文件
- C# 应用程序告诉我有关该文件的信息(例如重复项)
如何在“普通”Windows 资源管理器实例中监视当前选定的文件。我是否必须使用 .NET 启动实例才能获得进程的句柄?我是否需要一个句柄,或者是否有一些我可以在 C# 内部监视的“全局挂钩”。它有点像监视剪贴板,但不完全相同...
感谢任何帮助(如果您没有代码,只需将我指向正确的互操作、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);
}
}
}
I am trying to create a little helper application, one scenario is "file duplication finder". What I want to do is this:
- I start my C# .NET app, it gives me an empty list.
- Start the normal windows explorer, select a file in some folder
- The C# app tells me stuff about this file (e.g. duplicates)
How can I monitor the currently selected file in the "normal" windows explorer instance. Do I have to start the instance using .NET to have a handle of the process. Do I need a handle, or is there some "global hook" I can monitor inside C#. Its a little bit like monitoring the clipboard, but not exactly the same...
Any help is appreciated (if you don't have code, just point me to the right interops, dlls or help pages :-) Thanks, Chris
EDIT 1 (current source, thanks to 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);
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 shell 自动化接口来完成此操作。基本过程是
Shell32.dll(或者直接添加一个
参考VS)。
ShellWindows 的实例
收集和迭代。这将
包含 Windows 资源管理器和
Internet Explorer 窗口。
Windows 资源管理器窗口
IWebBrowser2.Document 属性将
返回 IShellFolderViewDual
参考。
有一个 SelectedItems 方法,您可以
查询和更改您的事件
可以处理。
You can do this with the shell automation interfaces. The basic process is to
Shell32.dll (or directly add a
reference from VS).
instance of the ShellWindows
collection and iterate. This will
contain both Windows Explorer and
Internet Explorer windows.
Windows Explorer windows, the
IWebBrowser2.Document property will
return a IShellFolderViewDual
reference.
has a SelectedItems method you can
query and an event for changes you
can handle.