代码之家  ›  专栏  ›  技术社区  ›  Kevin

如何查找最近访问的文件资源管理器窗口

  •  0
  • Kevin  · 技术社区  · 7 年前

    我正在尝试识别桌面上最近访问(使用)的文件资源管理器窗口。我使用EnumWindows筛选所有顶级窗口,最终得到的一组窗口与您在ALT-TAB显示中看到的窗口大致相同。

    我想将最近访问的文件资源管理器窗口置于前台,但我有两个问题。

    首先,如何识别资源管理器窗口。无法使用窗口标题,因为标题取决于访问的文件夹。我想我可以通过使用窗口句柄获取processID,并使用processID获取启动进程的进程名称、类名或可执行文件(例如“explorer.exe”或“CabinetEtc”)来识别它们

    或者,我可以将EnumWindows用于其他窗口,并使用Shell32。Shell调用以获取Shell32的列表。ShellFolderView直接查看窗口。所以,假设我可以识别一组三个或四个是文件资源管理器窗口的窗口。

    第二,我如何判断哪一个是最近访问的?我想我可以看看z顺序,然后选择z顺序中最高的窗口。我不知道如何访问z-order,尽管我在文档中读到了它。(我也希望每个桌面有一个z顺序列表,因为我有三个监视器,浏览器窗口可以在不同的监视器上。)

    或者可能有一个最近访问的浏览器窗口的时间戳,我在API文档中没有看到?

    如果有人能给我指出如何在一组窗口中找到MRA窗口的正确方向,我将不胜感激。非常感谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Kevin    7 年前

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

    因此,为了找到某个特定类型/类的最近使用的窗口,我使用FindWindows列出一组窗口,然后向下搜索列表以找到第一个匹配的窗口。第一场比赛似乎是我所追求的MRU窗口。

    例如,假设我查找所有具有非空标题字符串的窗口,然后使用foreach以正常循环方式循环集合。找到的第一个匹配项看起来像是MRU窗口(至少在我所有的手动测试用例中都是这样)。

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

    一个悬而未决的谜团是,龙的自然峰值窗口始终位于列表的顶部。可能它已经为自己设置了AlwaysOnTop属性,也可能由于某种原因它始终处于活动状态,并且是列表中的顶级MRU窗口。那里发生了一些事情,但我不知道发生了什么。

    推荐文章