在任何Windows应用程序中获取打开文档的path和文件名

目标

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

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

具体问题

现在,如何做到这一点,我有兴趣在如何实现的具体部分是: 如何获得任何当前正在运行的Windows应用程序的当前“打开文档”的path和文件名。 (如果这不能在任何 Windows应用程序中完成,那么下一个最好的方法就是尽可能多的应用程序。

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

特定应用解决scheme

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

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

但是,我真正想要的是对于我的系统上的任何应用程序(或者对于尽可能多的应用程序,尽可能合理地运行),无需为每个应用程序尝试编写特定于应用程序的解决scheme。

想法:最近的文档文件夹

一个想法:最近的文档文件夹(和/或其底层的Windows API)可以用来帮助这个吗? 它似乎有关于我在这里感兴趣的“打开文档”的相同概念的信息,显然适用于各种应用程序types。 (看看我的机器上最近的文档文件夹的内容,我看到那些显然是用各种应用程序打开的文件,包括MS Word,MS Excel,Eclipse,Adobe Acrobat Reader,Paint.NET,TOAD,和记事本2)。

首选解决scheme语言

更喜欢 C#或C ++代码中的解决scheme,但我愿意接受任何关于如何执行此操作的build议,而不考虑实现语言!

Windows 7的?

2009年11月更新:既然Windows 7已经广泛使用,那么我认为可能值得回到这个问题并问:Windows 7是否提供了任何新的API或者其他机制来帮助我尝试在这里完成?

Solutions Collecting From Web of "在任何Windows应用程序中获取打开文档的path和文件名"

最好的,你可以做的是看最近的文档注册表键,并获得最近的文件列表。 一些用于处理这些数据的示例代码在这个CodeProject文章中 。 这保存在:

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

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

应用程序没有强制性的机制来指定其打开的文档,所以这不是一般可能的。