1

目标

让我从我想要首先做的事情的最终愿景开始:在 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 或任何其他机制,这将有助于我尝试在这里完成?

4

2 回答 2

2

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

于 2009-08-12T18:27:54.840 回答
2

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

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

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

于 2009-08-12T18:35:07.133 回答