在Windows资源管理器中打开文件夹,然后选择仅第二次运行的文件

Uwe*_*eim 9 .net c# explorer windows-explorer windows-shell

使用SO帖子"打开文件夹并选择文件"的答案中描述的代码,我创建了这个函数:

public static void OpenExplorerAndSelectFile(string filePath)
{
    Process.Start(
        @"explorer.exe",
        string.Format(@"/select, ""{0}""", filePath));
}
Run Code Online (Sandbox Code Playgroud)

这个功能运行良好,有一个小问题:

首次为特定文件调用该函数时,Windows资源管理器会正确显示该文件的文件夹,但不会选择该文件.

再次为同一个文件调用相同的函数,它会切换回Windows资源管理器中已打开的文件夹,然后选择该文件.

例如,第一次调用OpenExplorerAndSelectFile("C:\MyFolder\MyFile.txt")在新的Windows资源管理器窗口中打开文件夹"C:\ MyFolder".第二次调用OpenExplorerAndSelectFile("C:\MyFolder\MyFile.txt")实际上再次激活该窗口并选择MyFile.txt.

在谷歌浏览器中做类似的事情(转到下载页面并显示以前下载的文件)实际上在第一次尝试时效果很好.

所以我的结论是谷歌Chrome似乎与我有点不同.

我的问题:

有没有办法调试/跟踪谷歌Chrome调用的Win32/Shell方法?

然后我会将它们与我所做的比较以查看差异.

Ale*_* K. 2

Chrome 很可能使用更灵活的 Shell API,而不是资源管理器命令行SHOpenFolderAndSelectItems

该答案包含所需的 p/invoke/implementation。