【问题标题】:Getting the path & filename of the open document in any Windows application在任何 Windows 应用程序中获取打开文档的路径和文件名
【发布时间】:2015-04-15 03:51:32
【问题描述】:

目标

让我从我希望首先做的事情的最终愿景开始:在 Windows 中,我希望能够使用我定义的全局键盘快捷键(例如,Ctrl+Alt+C) 将前台应用程序中打开的文档的完整路径和文件名复制到剪贴板。

这将很有用,例如,能够随后将路径和文件名粘贴到电子邮件客户端的“打开文件”对话框中,以将该文档附加到电子邮件中,而无需手动浏览到文件系统。

具体问题

现在,我对如何实现感兴趣的具体部分是:如何获取任意当前正在运行的 Windows 应用程序的当前“打开文档”的路径和文件名.(如果 任何 Windows 应用程序都无法做到这一点,那么下一个最好的办法就是让它与尽可能多的应用程序一起工作。)

显然,这不适用于某些不一定具有与本地文件系统上的文件相对应的“当前打开的文档”概念的应用程序,例如电子邮件客户端、IM 客户端或 (通常)网络浏览器。

特定应用解决方案

我知道可以编写特定于应用程序的解决方案来执行此操作。例如,下面的 MS Word VBA 子程序会将 Word 中打开文档的文件名和路径复制到剪贴板:

Dim myDataObject As DataObject
Set myDataObject = New DataObject
myDataObject.SetText ActiveDocument.FullName
myDataObject.PutInClipboard

但是,我真正想要的是适用于我系统上的任何应用程序(或者,同样适用于尽可能多的应用程序),而无需尝试为每个应用程序编写特定于应用程序的解决方案.

想法:最近的文档文件夹

一个想法:Recent Documents 文件夹(和/或其底层 Windows API)是否可以通过某种方式来帮助解决这个问题?它似乎有关于我在这里感兴趣的“打开文档”的相同概念的信息,这显然适用于各种应用程序类型。 (查看我机器上最近文档文件夹的内容,我看到其中的条目显然是为我使用各种应用程序打开的文档创建的,包括 MS Word、MS Excel、Eclipse、Adobe Acrobat Reader、Paint.NET、TOAD、和记事本2。)

首选解决方案语言

更喜欢使用 C# 或 C++ 代码的解决方案,但我愿意接受有关如何执行此操作的任何建议,无论实现语言如何!

Windows 7?

更新 11/2009: 既然 Windows 7 已广泛使用,我认为可能值得回到这个问题并询问:Windows 7 是否提供任何新的 API 或任何其他机制,这对我在这里想要完成的工作有帮助吗?

【问题讨论】:

    标签: windows language-agnostic windows-7 document


    【解决方案1】:

    您可能会做的最好的事情是查看最近的文档注册表项,并获取最近的文档列表。 this CodeProject article 中提供了一些用于处理此数据的示例代码。这保存在:

    HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
    

    但是,这不会显示文档当前是否打开。您可能会检查所有打开的应用程序的标题,因为许多应用程序会将文档名称放在其窗口标题中,但这不是必需的,许多应用程序不这样做。

    【讨论】:

      【解决方案2】:

      应用程序没有强制机制来指定其打开的文档,因此这通常是不可能的。

      【讨论】:

      • 但是 Windows 的“最近文档”文件夹如何工作(如原始问题中所述)?这似乎确实具有“打开文档”的概念,并且适用于许多不同的应用程序类型。
      • 应用程序可以调用 API SHAddToRecentDocs。他们不是必须的。
      • @Jon:我发布了关于那个具体事情的答案。
      猜你喜欢
      • 1970-01-01
      • 2023-01-29
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      相关资源
      最近更新 更多