如何找到最近访问的文件资源管理器 window

How to find the most recently accessed File Explorer window

我正在尝试识别桌面上最近访问(使用)的文件资源管理器 window。我使用 EnumWindows 过滤掉所有 top-level windows,最后我得到的一组看起来与您在 ALT-TAB 显示中看到的差不多。

我想将最近访问的文件资源管理器 window 调到前台,但我有两个问题。

首先,如何识别探索者windows。无法使用 window 标题,因为标题取决于访问的文件夹。我想我可以通过使用 window 句柄获取 processID 并使用 processID 获取进程名称、class 名称或启动进程的可执行文件来识别它们(例如 "explorer.exe"或 "CabinetEtc".)

或者,我可以将 EnumWindows 用于其他 windows,并使用 Shell32.Shell 调用直接获取 Shell32.ShellFolderView windows 的列表。因此,假设我可以识别一组三到四个 windows 文件资源管理器 windows.

第二,我怎么知道哪个是最近访问的?我想我可以以某种方式查看 z-order,然后选择 z-order 中最高的 window。我不知道如何访问 z-order,虽然我已经在文档中读到了它。(我也希望每个桌面有一个 z-order 列表,因为我有三个显示器和资源管理器 windows 可能在不同的显示器上。)

或者我在 API 文档中没有看到最近访问的资源管理器 window 的时间戳?

如果有人能给我指出正确的方向,让我找到有关如何在一组 windows 中找到 MRA window 的示例或文档,我将不胜感激。谢谢

我找不到关于查找最近使用的文件资源管理器的任何内容 window。这听起来很简单,但在做了很多实验之后,看起来 FindWindows 返回的 windows 列表是按 MRU 顺序排列的。

因此,要查找特定 type/class 中最近使用的 window,我使用 FindWindows 列出一组 windows,然后向下搜索列表以找到第一场比赛。第一场比赛似乎是我追求的 MRU window。

例如,假设我找到所有 windows 具有 non-empty 标题字符串的 Windows,然后使用 foreach 以正常循环方式遍历该集合。找到的第一个匹配项看起来像是 MRU window(至少在我所有的手动测试用例中都是如此)。

我没有证据表明当 windows 可能收到激活消息或任何更改其在 FindWindows 输出列表中的位置时此算法有效。我只是在搜索由用户手动激活的 MRU window。

一个未解之谜是 Dragon NaturallySpeaking 的 window 始终排在列表的首位。也许它为自己设置了 AlwaysOnTop 属性,或者它可能始终处于活动状态并且出于某种原因是列表中的顶部 MRU window。那里发生了一些事情,但我不知道是什么。