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

时间:2012-11-18 00:31:26

标签: c# windows hook windows-explorer

在Windows中,无论是在桌面上还是在Windows资源管理器中,我都希望检测选择(突出显示)文件或文件夹的时刻。当发生这种情况时,我想显示一个显示文件或文件夹全名的消息框。

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

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

2 个答案:

答案 0 :(得分:4)

查看此示例以获取鼠标单击或选定的事件:

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.ShellWindowsClass())
        {
            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);
                }
            }
        }
    }

答案 1 :(得分:1)

只是在雷尼尔的回答中加入一些东西:

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