【问题标题】:Recent pseudo-documents per application in WindowsWindows 中每个应用程序最近的伪文档
【发布时间】:2015-12-06 19:54:06
【问题描述】:

如果您查看 Classic Shell 开始菜单,您会看到它有一个用于最近应用程序的部分。该部分中的每个项目都可以包含弹出菜单,通常用于显示最近在应用程序中打开的文档。例如,“Word”项包含最近在 Word 中打开的所有 .doc 和 .docx 文件。我知道一种构建此类列表的方法:从“最近”文件夹中获取所有链接,并通过 .exe 名称过滤掉匹配的文档。

但 Classic Shell 开始菜单也会显示 RDC 等程序的弹出菜单。对于 RDC 客户端,即显示最近连接的列表。 Windows中似乎有pseudo-documents的概念,但我从未听说过。如何获取随机 .exe 文件的此类列表?

问候,

【问题讨论】:

    标签: windows shell winapi


    【解决方案1】:

    shell 维护最近文档的列表。 SHAddToRecentDocs 允许程序将项目添加到列表中。该项目可以是:

    列表和文档中的关键思想是项目可以是PIDL,它可以表示fancy kind of 'file'。 (你称之为pseudo-document。这过于简单化了。阅读文档。)

    要获取最近的文件列表,请使用SHGetFolderLocation 指定CSIDL_RECENT 并使用返回的PIDLIST_ABSOLUTE 来迭代shell 项。

    如果项目不是文件,则可以通过 COM IApplicationDocumentLists 检索列表,这需要 Application User Model ID。这不包括固定的项目,因为与there is no access to the start menu pin list 相同的原因,它们没有编程访问权限。

    对此有很多警告,文档对此进行了最佳解释:

    (已编辑以添加有关跳转列表的信息,并且列表中缺少IShellLink。)

    【讨论】:

    • Explorer 不显示“最近”文件夹中的连接链接是否可以,因为它会过滤它们(作为没有真实文件的纯 PIDL 对象)?但是枚举会返回整个列表,包括它们?我只需要使用新的 API(SHARDAPPIDINFOSHARDAPPIDINFOIDLIS)映射链接以映射到 exe,任务就完成了吗?
    • 1) 资源管理器如何过滤条目完全是它自己的决定,并且可能会发生变化,但通常SHAddToRecentDocs 会为特定文件类型注册指定的应用程序。有很多例外,因此您最好进行一些实验并阅读文档以获得所需的结果。 2)非文件项被添加到应用程序的跳转列表中,我将在答案中添加一些信息。 3)一般来说,是的。该文档包含有关该过程的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多