在Windows资源管理器中检测文件选择

5

在Windows中,无论是桌面还是Windows资源管理器中,我想要检测文件或文件夹被选中(高亮)的时刻。当发生这种情况时,我希望显示一个消息框,显示文件或文件夹的完整名称。

如果选择了多个项目,我想要显示所有这些项目。

请注意,我的解决方案必须用C#编写。


你读过这个或者这个吗? - khellang
谢谢,khellang,是的,我已经阅读了它们。但我仍然感到困惑。我需要一份清晰的C#代码。 - ohsorry
我正在尝试这个:IShellFolderViewDual2 - ohsorry
有人可以帮我吗?在Windows 7中,资源管理器窗口底部有一个详细信息栏,当用户选择一个文件时,该栏会显示有关该文件的更多详细信息。这正是我想要做的。 - ohsorry
1
正确的方法不是尝试将额外的内容注入到资源管理器中,而是自己托管资源管理器(ExplorerBrowser对象)并监听选择事件。 - Raymond Chen
这可能是一个相关的问题:https://dev59.com/HF3Va4cB1Zd3GeqPC7Jn - maximpa
2个回答

5
请看以下示例,以获取鼠标单击或选定事件: https://stackoverflow.com/questions/7222749/i-created-a-program-to-hide-desktop-icons-on-double-click-of-desktop-but-would-o 将此代码与以下代码结合使用,记得添加对SHDocVW.dll和Shell32.dll的引用,这将返回每个资源管理器中选择的所有项目和文件夹路径。
public void GetListOfSelectedFilesAndFolderOfWindowsExplorer()
    {
        string filename;
        ArrayList selected = new ArrayList();
        var shell = new Shell32.Shell();
        //For each explorer
        foreach (SHDocVw.InternetExplorer window in new SHDocVw.ShellWindows())
        {
            filename = Path.GetFileNameWithoutExtension(window.FullName).ToLower();
            if (filename.ToLowerInvariant() == "explorer")
            {
                Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)window.Document).SelectedItems();
                foreach (Shell32.FolderItem item in items)
                {
                    MessageBox.Show(item.Path.ToString());
                    selected.Add(item.Path);
                }
            }
        }
    }

这会在桌面上查找高亮显示的文件吗? - jazz

2

在Renier的回答中补充一些内容:

  • SHDocVW.dllShell32.dll位于C:\Windows\System32文件夹中
  • 如果您在SHDocVw.ShellWindowsClass()处出现错误,只需右键单击解决方案资源管理器中的SHDocVw引用,然后选择属性并将嵌入互操作类型设置为false

1
如果您使用 SHDocVw.ShellWindows() 而不是 SHDocVw.ShellWindowsClass(),那么您就不必调整“嵌入互操作类型”设置。请参见 https://dev59.com/gFHTa4cB1Zd3GeqPVN3p#4174056。 - peterflynn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接